给定线段AB,你可以使用著名的中点公式
(A + B)/2
找到中点M。现在计算从B到A的向量:
p = <p.x, p.y> =
A ‒
B
将其绕原点逆时针旋转90°以得到垂直向量
n = <n.x, n.y> = < ‒ p.y, p.x >
归一化它:
n = <n.x, n.y> / ‖n‖其中 ‖n‖= √(n.x² + n.y²) 为欧几里得范数或长度
C = L(t) =
M + t
n
使用这个方程-参数形式的线性方程-你可以找到垂直线上的任意数量的点(沿着n的方向)。
t
是所得点C与M之间的距离。当
t = 0
时,你会得到M,当
t = 1
时,你会得到一个距离M沿n 1单位的点等等。这也适用于
t
的负值,其中获得的点将位于AB的相反侧,即朝向备注。由于
t
可以是一个小数,你可以通过改变它的值来得到所需的距离和方向从M获得的点。
代码,因为你说你对数学术语不感兴趣 ;)
vec2d calculate_perp_point(vec2d A, vec2d B, float distance)
{
vec2d M = (A + B) / 2;
vec2d p = A - B;
vec2d n = (-p.y, p.x);
int norm_length = sqrt((n.x * n.x) + (n.y * n.y));
n.x /= norm_length;
n.y /= norm_length;
return (M + (distance * n));
}
由于我不确定您的项目中使用的向量数学库,因此这只是伪代码。
上面的粗体变量是二维向量;大写字母表示点,小写字母表示没有位置的向量