另一个共线点问题。这个问题是,我正在使用整数算法,并且正在寻找精确的共线性,而不是基于模糊epsilon的测试。

使用内联汇编,我可以得到确切的答案:x86乘法指令可访问产品的高低部分,这两者在计算叉积( X - A )时都很重要 B - A );我可以简单地将两个半部分或在一起并测试零。但是我希望有一种方法可以在C语言中实现,那就是:

  • 防溢出
  • 便携式
  • 优雅的

  • 大致按此顺序。同时,做某事的方法是/不会:
  • 涉及转换为double
  • 涉及使用更大的整数类型-假设我已经在使用可用于我的坐标组件类型
  • 的最大整数类型
  • 产生假阳性或假阴性。

  • 我不关心 X 是否超出了 AB AB 段;那只是四个无趣的比较。

    我的噩梦场景是必须将每个坐标分量分成两半,并明确地进行长乘法,以便可以跟踪部分乘积中的所有高半部分。 (然后必须明确地进行“随身携带”。)

    最佳答案

    经过一些比较和简单的检查之后,您可以获得2个正数(x1,y1)(x2,y2),它们要检查x1*y2==x2*y1

    您可以使用欧几里得算法来找到x1y1的GCD,然后将它们均按GCM划分。对(x2,y2)做同样的事情。如果在两种情况下您使用相同的对,则两个 vector 的方向相同。

    关于c - 如何确定3个点在Z ^ 2中是否完全共线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9474453/

    10-09 06:23