定义 和概念

向量是方向线定义了 2 个坐标。


将一个向量乘以一个数k是将它的长度改变k次。 当\(k < 0\) 向量将扩展。

向量的长度 由公式 \(\sqrt {x^2 + y^2} \)

Normalized vector -单位长度的向量,通过向量除以它的长度得到。

向量之和是通过从第一个向量的末尾构建第二个向量,并将该向量放入结果点中获得的。< /p>

如果 x1, y1, x 2, y2 - 分别是第一个和第二个向量的坐标,然后它们的总和是坐标为 \((x_1 + x_2) \)\((y_1 + y_2) \)

矢量差 - 第二个矢量反转后的总和(乘以 -1)。

向量的点积 - 数字,一个向量在另一个向量上的投影乘以它的长度。在普通欧几里德空间的最简单情况下,有时会使用“几何”空间。非零向量 a 和 b 的标量积定义为这些向量的长度与它们之间夹角的余弦值的乘积:  
\(a \cdot b = |a| \cdot |b| \cdot cos \alpha\)

对于向量的点积,以下公式成立:
\(a \cdot b = x_1 \cdot x_2 + y_1 \cdot y_2\)
其中x1, y1, x2 >, y2 - 第一个和第二个矢量的坐标,分别允许您确定第二个矢量是否与第一个矢量位于同一半平面。< /p>

向量的叉积 - 垂直于两个向量的三维空间中的向量,长度等于 的定向面积基于这些向量构建的平行四边形。向量的长度乘以它们之间夹角的正弦,这个正弦的符号取决于操作数的顺序:   alpha\) 

如果使用坐标计算:
\(a\ x\ b = x_1 \cdot y_2 + x_2 \cdot y_1\),
其中x1, y1, x2 >, y2 - 第一个和第二个向量的坐标,分别允许您确定第一个向量位于直线的哪一侧,第二个向量位于.还可以让您找到三角形和平行四边形的定向区域。

矢量的旋转 是使用 Lobachevsky 几何学的秘密专家的黑魔法执行的。
逆时针旋转向量 \(\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}}\),
其中x1, y1是点的坐标。

法向量加点,或者方向向量加点,归结起来就是2个点做直线,我们来看一下(也是最常用的).

如果 x1, y1, x 2, y2 - 分别是第一点和第二点的坐标,则

\(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 - 第二行的系数,
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)} \)

我们已经知道如何检查直线的交点(它们不平行),并找到它们的交点。

现在让我们学习如何使用来做到这一点。 

首先,让我们学习如何简单地检查它们的交集。

线段相交 如果一个线段的末端位于另一个线段的相对侧,反之亦然(这很容易通过叉积检查)。  唯一不起作用的情况 - 线段位于一条直线上。 为此,您需要检查所谓的交点。 bounding box(线段的边界框)- 检查线段投影在 XY 上的交点。

轴。

既然我们知道如何检查线段是否相交,让我们学习如何找到它们相交的点(或线段):
- 如果它们不相交,那么很明显这样的点不存在;
- 否则,我们将构建这些线段所在的直线。

如果它们是平行的,那么线段位于同一条线上,我们需要找到相交线段 - 从线段左边界的最大值到右边界的最小值(点小于另一个点,如果它在左边,在相等的情况下 X-coordinates - 如果它更低)。

如果线不平行,则找到它们的交点并将其返回。