stackowerflow では、線分の交点について多くの質問が寄せられていますが、もう 1 つ質問があります。申し訳ありませんが、交点の計算方法を理解するのに助けが必要です. ここでいくつかの質問を読み、他のウェブサイトでいくつかの例を見ましたが、まだ混乱していてわかりません! 物事がどのように機能するかを知らずに、コードをコピーして貼り付けるのは好きではありません。
これまでのところ、Ax、Ay、Bx、By、Cx、Cy、Dx、Dy などの各線分のポイントを比較することはわかっています。交差がある場合、計算の結果はどうなるでしょうか?
これは私が見たコード例の 1 つです。線が交差するかどうかを知るためだけに、交点は必要ないと思います。
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