从2个给定点构造一个垂直三角形

时间:2016-05-04 21:10:39

标签: matlab

我想从两个给定点AB构建一个垂直三角形。在这种特殊情况下,从这些点创建的行c对于每个y都会升入x方向。 (粉红色)

B点,我想构建一条腿a,其长度固定为90°,向下方向。 (颜色为绿色)。

从上面的点C和段b(紫色)开始。

enter image description here

我已将以下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);

这是绘图的结果。

enter image description here

正如您所看到的那样,a腿已经在点A而不是点B处构建,并且腿指向我想要的相反方向。

如果有人能解释我的错误,我将不胜感激。

由于

2 个答案:

答案 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。