我想从两个给定点A
和B
构建一个垂直三角形。在这种特殊情况下,从这些点创建的行c
对于每个y
都会升入x
方向。 (粉红色)
在B
点,我想构建一条腿a
,其长度固定为90°,向下方向。 (颜色为绿色)。
从上面的点C
和段b
(紫色)开始。
我已将以下Matlab代码写入calc C
并显示结果。
A = [ 1 1 ];
B = [ 5 4 ];
a = 2; % fixed len
c = sqrt((B(1)-A(1))^2 + (B(2)-A(2))^2);
b = sqrt(c^2 + a^2);
alpha = atan(a/c);
gamma = atan(c/a);
C = A + 1/tan(gamma)*[-1 * (B(2)-A(2)) (B(1)-A(1))];
ALL = [A;B;C]
x = ALL(:,1);
y = ALL(:,2);
%plot
xlim([-2 8]);
ylim([-2 8]);
patch(x,y, 'green');
% debug output
acheck = sqrt((A(1)-C(1))^2 + (A(2)-C(2))^2) % this should be B-C but somehow it isnt
alpha_deg = rad2deg(alpha);
gamma_deg = rad2deg(gamma);
这是绘图的结果。
正如您所看到的那样,a
腿已经在点A
而不是点B
处构建,并且腿指向我想要的相反方向。
如果有人能解释我的错误,我将不胜感激。
由于
答案 0 :(得分:1)
仅计算B-A的标准正交矢量会不会更容易? 类似的东西:
n = [A(2)-B(2) B(1)-A(1)];
n = n/norm(n)*2;
C = B+n;
或
C = B-n;
答案 1 :(得分:1)
你从1/tan(gamma)*[-1 * (B(2)-A(2)) (B(1)-A(1))]
找到的是从B指向C的向量。向它添加B。