Math 以对称方式计算两段之间的交点

Math 以对称方式计算两段之间的交点,math,geometry,precision,line-segment,Math,Geometry,Precision,Line Segment,使用常用公式计算两个二维线段之间的交点时,即,如果将结果四舍五入为整数,则会得到非对称结果 也就是说,有时,由于舍入误差,我得到了交点(A,B)=交叉口(B、A) 最好的解决方案是继续使用浮点数,并将结果比较到一定的精度。但是,在计算交集后,我必须将结果四舍五入为整数,我无法继续使用浮点 到目前为止,我的最佳解决方案是对平面中的线段使用一些完整的顺序,并使用交点始终将较小的线段与较大的线段进行比较 有更好的方法吗?我遗漏了什么吗?您不想比较段长度 此外,我假设当比较交叉点(A',B')与交叉点(

使用常用公式计算两个二维线段之间的交点时,即,如果将结果四舍五入为整数,则会得到非对称结果

也就是说,有时,由于舍入误差,我得到了
交点(A,B)=交叉口(B、A)

最好的解决方案是继续使用浮点数,并将结果比较到一定的精度。但是,在计算交集后,我必须将结果四舍五入为整数,我无法继续使用浮点

到目前为止,我的最佳解决方案是对平面中的线段使用一些完整的顺序,并使用
交点
始终将较小的线段与较大的线段进行比较


有更好的方法吗?我遗漏了什么吗?

您不想比较段长度

此外,我假设当比较
交叉点(A',B')
交叉点(B',A”)
时,可以理解
A'
的坐标与
A“
的坐标相同(idem表示
B'
B”
),否则没有解决方案

这句话,考虑段落<代码> [PQ] 和<代码> [RS] ,其中<代码> P<代码> >代码> Q>代码>,<代码> R>代码>和<代码> s >代码>是平面内的点。您需要线段的交点:

  • [PQ]
    [RS]
  • [QP]
    [RS]
  • [PQ]
    [SR]
  • [QP]
    [SR]
  • [RS]
    [PQ]
  • [SR]
    [PQ]
  • [RS]
    [QP]
  • [SR]
    [QP]
。。。始终返回相同的坐标对


排序,首先是每个段上的端点,然后是段本身(基于每个段的最小端点),是保证可再现结果的唯一解决方案。排序本身在计算上可能很简单,例如,
PThanks,这就是我的想法。然而,如果有一种方法总是选择精度误差最小的计算路径,那么它将是对称的,并将减少精度误差。也许不可能做到这一点。@Vlad,您可以从“您不想比较段长度”开始。你为什么这么说?“这是计算成本还是其他原因?”brainjam,虽然我不能代表Vlad说话,但我认为他不希望损失精度和平方根函数的计算成本。@barinjam,有多种原因,包括计算成本和正确性。最后,您希望交集公式中非交换项的顺序相同,而不考虑4个端点
(x,y)
对的显示顺序,这可以通过对它们(点)进行排序来解决段长度是一个简单的标准,它不能保证在最终产生错误的计算中的非交换项顺序。有什么原因不能使用,比如说,symmetricIntersection(a,B)=(交集(a,B)+交集(B,a))/2?浮点加法是可交换的,它在数学上非常好,但它需要我计算两次交点,并且依赖于浮点舍入,所以我不确定它在实践中是否比分段排序好得多。无论如何,竖起大拇指!“我喜欢。”brainjam,一旦出现错误,任何操作都会放大错误。因此,如果已经比较了
X
=
Y
的结果为假,
X
=
(X+Y)/2
也可能为假。此外,在
X
=
Y
可能为真的情况下,
X
=
(X+Y)/2
可能为假(例如
X
Y
可以无误地表示,但是
X+Y
不能无误地再表示。)