在3D中的两个矢量角平分线

时间:2012-12-10 18:37:32

标签: matlab math

我不知道如何计算3D中两个矢量(由3个点定义)的角平分线。 例: 我的观点是:

P1=[0 0 0];
p2=[26.94,-6.68,42.76];
P3=[7.2804  -11.1231   46.6817];

p2是角平分线的起点。

enter image description here

p1=[0 0 0];
p2=[26.94,-6.68,42.76];
p3=[7.2804  -11.1231   46.6817];


V1=[(p1(1)-p2(1)) (p1(2)-p2(2)) (p1(3)-p2(3))];
V2=[(p2(1)-p3(1)) (p2(2)-p3(2)) (p2(3)-p3(3))];

V1=V1/norm(V1);
V2=V2/norm(V2);

Bisector=V1+V2;
figure
hold on

plot3([p3(3),p2(3)],[p3(2),p2(2)],[p3(1),p2(1)],'Color','r','LineWidth',2)
plot3([p1(3),p2(3)],[p1(2),p2(2)],[p1(1),p2(1)],'Color','r','LineWidth',2)

plot3([p2(3),Bisector(3)],[p2(2),Bisector(2)],[p2(1),Bisector(1)],'Color','y','LineWidth',2)

enter image description here

2 个答案:

答案 0 :(得分:9)

标准化矢量,然后添加它们。结果向量将另外两个平分。

答案 1 :(得分:1)

您的代码中有一些错误。这应该解决它。

V1=[(p1(1)-p2(1)) (p1(2)-p2(2)) (p1(3)-p2(3))];
V2=[(p3(1)-p2(1)) (p3(2)-p2(2)) (p3(3)-p2(3))];

V1=V1/norm(V1);
V2=V2/norm(V2);

Bisector=V1+V2;
figure
hold on

plot3([p3(3),p2(3)],[p3(2),p2(2)],[p3(1),p2(1)],'Color','r','LineWidth',2)
plot3([p1(3),p2(3)],[p1(2),p2(2)],[p1(1),p2(1)],'Color','r','LineWidth',2)

plot3([p2(3),Bisector(3)+p2(3)],[p2(2),Bisector(2)+p2(2)],[p2(1),Bisector(1)+p2(1)],'Color','y','LineWidth',2)

请注意粗体中的两行。

第一个问题基本上是一个标志问题。您需要翻译矢量,以便p2位于原点。因此,要获得V1V2,,您分别从p2p1减去p3。您在计算V1但计算V2=p2-p3而不是V2=p3-p2时执行此操作。

第二个问题是您的向量Bisector是相对于位于p2的原点进行翻译的。因此,您需要将其转换回原始坐标系。只需将p2添加到Bisector向量中以进行显示即可完成此操作。这就是现在在最后一行所做的事情。