定義と概念

ベクトル は、次の方向の線です。 2 つの座標を定義しました。


ベクトルに数値 k を掛けると、その長さが k 倍変化します。\(k < 0\) ベクトルが展開されます。

ベクトルの長さは、式\(\sqrt {x^2) で計算されます。 + y^2} \)

正規化ベクトル - ベクトルをその長さで割ることによって得られる単位長のベクトル。

ベクトルの合計は、最初のベクトルの末尾から 2 番目のベクトルを作成し、そのベクトルを結果の点に入れることで取得されます。< /p>

If x1y1x 2y2 - それぞれ最初と 2 番目のベクトルの座標。それらの合計は座標 \((x_1 + x_2) \)\((y_1 + y_2) \)

ベクトルの差 - 2 番目のベクトルを反転した合計 (-1 を乗算)。

ベクトルの内積 - あるベクトルを別のベクトルに投影し、その長さを乗算した数値。通常のユークリッド空間の最も単純なケースでは、「幾何学的」空間が使用されることがあります。非ゼロベクトル ab  のスカラー積を、これらのベクトルの長さとそれらの間の角度のコサインの積として定義します。  
\(a \cdot b = |a| \cdot |b| \cdot cos \alpha\).

ベクトルによるドット積の場合、次の式が当てはまります。
\(a \cdot b = x_1 \cdot x_2 + y_1 \cdot y_2\),
ここで、x1y1x2 >、y2 - 最初と 2 番目のベクトルの座標をそれぞれ使用すると、2 番目のベクトルが最初のベクトルと同じ半平面にあるかどうかを判断できます。< /p>

ベクトルの外積 - 両方のベクトルに垂直な 3 次元空間内のベクトル。長さは、これらのベクトルに基づいて構築された平行四辺形。ベクトルの長さとベクトル間の角度の正弦との積、およびこの正弦の符号はオペランドの順序によって異なります:   alpha\) 

座標を使用して計算した場合:
\(a\ x\ b = x_1 \cdot y_2 + x_2 \cdot y_1\),
ここで、x1y1x2 >、y2 - 最初と 2 番目のベクトルの座標をそれぞれ使用すると、最初のベクトルが線のどちら側にあるのか、2 番目のベクトルが位置するのかを判断できます。 。また、三角形や平行四辺形の向きのある領域を見つけることもできます。

ベクトルの回転 は、ロバチェフスキー幾何学の秘密の熟練者の黒魔術を使用して実行されます。
ベクトルを反時計回りに \(\alpha\) だけ回転するには (\(\alpha <= 2 \cdot \ pi\ )、ラジアン単位の角度に慣れてください)、ベクトルに次の行列を乗算する必要があります。
\(\begin{bmatrix} \cos \alpha & -sin \alpha \\ \sin \alpha & cos \alpha \end{bmatrix}\)< /p>

ベクトルと行列を乗算するとはどういう意味ですか?ベクトルの座標が xy であるとします。このベクトルと行列の積は、座標 x' のベクトルと等しくなります。 ; y':
\(x' = x \cdot cos \alpha - y \cdot sin \alpha \\ y' = x \cdot sin \alpha + y \cdot cos\alpha\)

したがって、まったく同じ長さの新しいベクトルが得られますが、すでに反時計回りに角度 A だけ回転されています。

ラインは 5 つの異なる方法で定義できます:
1) 方程式\( y = kx + b\);学校で教えられる最初の直線の方程式は、手動で作成したり計算したりするには便利ですが、プログラムで使用するのは非常に不便です。
2) 2 つの点を上に置きます - 実際には非常に便利ですが、適用範囲はかなり狭いです。
3) 直線と点の法線ベクトルによる - 直線に対する法線ベクトルはそれに垂直なベクトルです。これについては以下で詳しく説明します。
4) 直線と点の方向ベクトルに沿って - 方向ベクトルは直線上にあり、法線ベクトルに垂直なベクトルです (まあ、論理的です)。これについては以下で説明します。
5) 直線の方程式 \(ax + by + c = 0\);古典的な直線の方程式であり、ほとんどの場合、最も普遍的です。さて、彼について。

このような直線の法線ベクトルの座標: \((a; b)\) または \( (-a; -b)\)

このような直線の方向ベクトルの座標: \((-b; a)\) または \ ((b; -a)\).

次の場合、

線は平行です
\({a1 \over b1} = {a2 \over b2}\).

点から線までの距離 (注意: 距離は負の値になる可能性があります。すべては点が線のどちら側にあるかによって異なります):
\({(a \cdot x_1 + b \cdot y_1 + c) \over \sqrt{a^2 + b^2}}\),
ここで、x1y1 は点の座標です。

法線ベクトルと点、または方向ベクトルと点から線を構築することは、結局 2 つの点から線を構築することになるので、それを見てみましょう (これは最も一般的に使用される方法でもあります) ).< /p>

If x1y1x 2y2 - それぞれ最初と 2 番目の点の座標、その後

\(a = y_1 - y_2\)

\(b = x_2 - x_1\)

\(c = x_1 \cdot y_2 - x_2 \cdot y_1\)

交差点

の交点

a1, b1, c1 - 最初の行の係数、
a2, b2, c2 - 2 行目の係数
x, y - 交点。

\(x = {-(c1 \cdot b2 - c2 \cdot b1) \over (a1 \cdot b2 - a2 \cdot b1)} \\ y = {-(a1 \ cdot c2 - a2 \cdot c1) \over (a1 \cdot b2 - a2 \cdot b1)} \)

線の交点 (平行ではない) をチェックし、交点を見つける方法は既に知っています。

では、セグメントでこれを行う方法を学びましょう. 

まず、交差を簡単にチェックする方法を学びましょう。

セグメントが交差する一方の端が他方の反対側にある場合、およびその逆の場合 (これは外積によって簡単に確認できます)。  これが機能しない唯一のケース - セグメントは 1 つの直線上にあります。 そのためには、いわゆる交点をチェックする必要があります。 バウンディング ボックス (セグメントのバウンディング ボックス) - XY 上のセグメントの射影の交点を確認します。

軸。

セグメントの交点をチェックする方法がわかったので、交点のポイント (またはセグメント) を見つける方法を学びましょう:
- 交差しない場合、そのような点が存在しないことは明らかです。
- それ以外の場合は、これらのセグメントが存在する直線を作成します。

それらが平行である場合、セグメントは同じ線上にあり、セグメントの左境界線の最大値から右境界線の最小値までの交差セグメントを見つける必要があります (点が他の点よりも小さい場合、左にある場合、等しい場合は X-座標 - 低い場合)。

線が平行でない場合は、交点を見つけて返します。