我不知道如何计算3D中两个矢量(由3个点定义)的角平分线。 例: 我的观点是:
P1=[0 0 0];
p2=[26.94,-6.68,42.76];
P3=[7.2804 -11.1231 46.6817];
p2是角平分线的起点。
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)
答案 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
位于原点。因此,要获得V1
和V2,
,您分别从p2
和p1
减去p3
。您在计算V1
但计算V2=p2-p3
而不是V2=p3-p2
时执行此操作。
第二个问题是您的向量Bisector
是相对于位于p2
的原点进行翻译的。因此,您需要将其转换回原始坐标系。只需将p2
添加到Bisector
向量中以进行显示即可完成此操作。这就是现在在最后一行所做的事情。