關於stackowerflow線段之間的交點有很多問題,這裏還有一個問題!對不起,我需要幫助才能瞭解如何計算交叉點。我在這裏閱讀了幾個問題,並在其他網站上查看了幾個示例,但我仍然感到困惑,不明白!我不喜歡在沒有事情的情況下複製和粘貼代碼。計算線段之間的交點
到目前爲止,我知道我要比較像Ax,Ay,Bx,By,Cx,Cy,Dx,Dy等每個線段的點。有人可以向我解釋我要計算什麼,如果有交叉點,計算的結果是什麼?
這是我看到的示例代碼之一。我想我不需要相交點,只是爲了知道這些線是否相交。
public static Point lineIntersect(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) {
double denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
if (denom == 0.0) { // Lines are parallel.
return null;
}
double ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3))/denom;
double ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3))/denom;
if (ua >= 0.0f && ua <= 1.0f && ub >= 0.0f && ub <= 1.0f) {
// Get the intersection point.
return new Point((int) (x1 + ua*(x2 - x1)), (int) (y1 + ua*(y2 - y1)));
}
return null;
}
我是否還需要計算一些像這個代碼示例中的值?
For lines through points (x0,y0) and (x1,y1), let xm = (x0+x1)/2, ym = (y0+y1)/2 (median of line segment).
Then a = (y1-y0) and b = (x0-x1).
If you evaluate c = a(x-xm)+b(y-ym), c=0 for (x,y) on the line, and the sign(c) tells you which side a point is on
是你的點整數或浮點數? – 2013-05-02 00:02:21