gpt4 book ai didi

java - 识别两条线的交点

转载 作者:行者123 更新时间:2023-12-01 12:19:43 29 4
gpt4 key购买 nike

计算结果如下

L1 = 连接点 A(x1,y1) 和 B(x2,y2) 的线L2 = 连接点 c(x3,y3) 和 D(x4,y4) 的线

L1线

直线方程:y = m1*x + c1

斜率 m1:(y2-y1)/(x2-x1)

Y 截距:c1 = (y1 - m1*x1)

L2线

直线方程:y = m2*x + c2

斜率m2:(y4-y3)/(x4-x3)

Y 截距:c2 = (y3 - m2*x3)

对于交点

求解上述方程我们得到

x = (c2 -c1)/(m1-m2)

y = (c1*m2 - c2*m1)/(m2-m1)

上面的计算用于计算我的java程序中的交点。

问题

当两条线分别平行于 x 轴和 y 轴时,就会出现此问题。例如,如果连接点如下

L1 = A(34,112) B(34,180) ...(x 坐标值保持不变)

L2 = C(72,100) D(88,100) ...(y 坐标值保持不变)

现在 m1 将变为无穷大,m2 将变为 0,相应地,c1 将变为无穷大,并且 c2=y3,因此使用下面给定公式计算交点得出尽管 L1 和 L2 行必须在 (34,100) 处相交,但结果很奇怪 (NaN)。

x = (c2 -c1)/(m1-m2)

y = (c1*m2 - c2*m1)/(m2-m1)

为什么会出现这样的问题?如何使用数学来处理这个问题,以便可以在程序中实现。

最佳答案

平行于 y 轴的线不能表示为 y = ax + b。您需要使用直线的一般方程ax + by + c = 0。确定两条直线方程的系数并求解它们相交的线性系统。确保系统的行列式不为0,否则无解,或者无穷大(你可以认为这是另一种无解的情况)。

考虑到线段的法 vector ,您可以很容易地获得ab系数(如果vect(AB) = (x,y) code> 然后 normal(AB) = (-y,x) = (a,b)。然后通过在方程中引入 A 的坐标来确定 c:c = -a*x_A - b*y_A

您现在有一个线性系统需要求解:

(S) : { a1*x + b1*y + c1 = 0    
{ a2*x + b2*y + c2 = 0

如果det = a1*b2 - a2*b1 = 0(小心精度损失,按 epsilon 进行比较),则系统没有 unic 解。否则,您可以找到系统矩阵的逆矩阵:

M = (a1  b1), M^(-1) = 1/det * ( b2  -b1) 
(a2 b2) (-a2 a1)

现在你只需要计算

M^(-1) * (-c1) = 1/det * (-b2*c1 + b1*c2)
(-c2) ( a2*c1 - a1*c2)

就是这样,你就有了解决方案!

关于java - 识别两条线的交点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26779371/

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