我想确定下面代码中给出的每条线的法线方向。有没有办法在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)
谢谢。
答案 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,如预期的那样。