y = mx + c による線の表現は、コンピュータ グラフィックスでは問題があります。垂直線では m が無限大である必要があるからです。
さらに、コンピュータ グラフィックスの線には、範囲が無限である数学的な線とは異なり、始点と終点があります。通常、交点が問題の両方の線分上にある場合にのみ、線の交点に関心があります。
ベクトル x1 から x1+v1 までの 1 つとベクトル x2 から x2+v2 までの 2 つの線分がある場合、次のように定義します。
a = (v2.v2 v1.(x2-x1) - v1.v2 v2.(x2-x1)) / ((v1.v1)(v2.v2) - (v1.v2)^2)
b = (v1.v2 v1.(x2-x1) - v1.v1 v2.(x2-x1)) / ((v1.v1)(v2.v2) - (v1.v2)^2)
ここで、ベクトル p=(px,py)、q=(qx,qy) の場合、pq は内積 (px * qx + py * qy) です。最初に (v1.v1)(v2.v2) = (v1.v2)^2 かどうかを確認します。そうであれば、線は平行で交差していません。
それらが平行でない場合、0<=a<=1 かつ 0<=b<=1 の場合、交点は両方の線分上にあり、点によって与えられます。
x1 + a * v1
編集a と b の方程式の導出は次のとおりです。交点はベクトル方程式を満たします
x1 + a*v1 = x2 + b*v2
v1
この方程式と、およびの内積を取ると、次のv2
2 つの方程式が得られます。
v1.v1*a - v2.v1*b = v1.(x2-x1)
v1.v2*a - v2.v2*b = v2.(x2-x1)
これは、a と b の 2 つの線形方程式を形成します。この連立方程式を解くと (最初の方程式に v2.v2 を掛け、2 番目の方程式に v1.v1 を掛けて引き算するなどして)、a と b の方程式が得られます。