如何确定向量的方向(或其法线)

时间:2016-11-08 19:29:46

标签: matlab geometry

我想确定下面代码中给出的每条线的法线方向。有没有办法在Matlab中做到这一点?

x = linspace(-10,10, 12);
y1 = -(0.5*x) + 1.333;
plot(x, y1); hold on

%2nd line
xd = 5;
plot(xd, x, 'o')

%vectors and normal vectors 
n1 = [0.5, 1]; v1 = [1, -0.5];
n2 = [-5, 0]; v2 = [0, 5];
angle = (acos(dot(v1, v2) / (norm(v1) * norm(v2))) * 180/pi)

谢谢。

1 个答案:

答案 0 :(得分:0)

要确定直线的斜率,可以在线上选取任意两个不同的点(p0,f(p0))和(p1,f(p1)),并确定线的斜率( f(p1)-f(p0))/(p1-p0)。让我们选择你行上的第一个和最后一个点(索引为1和结束)。

第一行的斜率为:

slope = (y1(end) - y1(1)) / (x(end) - x(1));

计算到-0.5 - 正如我们对该行的定义所期望的那样。

第二行的斜率为:

slope = (x(end) - x(1)) / (xd - xd);

这是无限的,因为它是一条垂直线。

线的法线斜率为-1除以该线的斜率:

normal_slope = -1/slope;

MATLAB负责设置-1 / inf == -1 /( - inf)== 0,因此当斜率无限时,你不必将特殊情况分开。

该计算表明,第1行法线的斜率为2,第2行法线的斜率为0,如预期的那样。