gpt4 book ai didi

java - 如果两条线使用叉积相交

转载 作者:太空宇宙 更新时间:2023-11-04 14:28:30 25 4
gpt4 key购买 nike

我试图弄清楚两条线是否在平面上相交。我一直在尝试使用 vector 的叉积,但在大量数据时得到了错误的答案。我意识到其中一些原因是因为没有那么长时间拥有一切,但即使在这种变化之后,我仍然发现不存在的交叉点。谁能注意到我是否犯了错误。我已经尝试弄清楚很长一段时间了。

我的代码如下:

 public static boolean intersecting_segments ( Line_Segment A, Line_Segment B)
{

float side_one;, side_two ,side_three, side_four ;

side_one = cross_product( A, B.p) ;
side_two = cross_product( A, B.q) ;
side_three = cross_product( B, A.p) ;
side_four = cross_product( B, A.q) ;

return ( side_one >0 && side_two <0)|| ( side_one <0 && side_two >0) &&
( side_three >0 && side_four <0)|| ( side_three <0 && side_four >0);
}


public static long cross_product ( Line_Segment S, End_point r )
{

return (long)(((long)r.x -(long)S.p.x)*((long)S.q.y-(long)S.p.y)) -(((long)r.y- (long)S.p.y)*((long)S.q.x-(long)S.p.x));
}

最佳答案

您也应该将 side_XX 变量设置得很长,这可能会解决您的问题。如果这些变量必须有小数,请使用 double 而不是 float 。

原因是虽然 cross_product 函数返回一个 long,但它们分配给的变量(side_one、side_two 等)是 float 。这将强制从 long 转换为 float,这会损失精度并且对于大数来说不准确。

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

关于java - 如果两条线使用叉积相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26415667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com