三维空间的线性插值

2次浏览(过去30天)
Bijay Sangat
Bijay Sangat 2021年8月21日
评论道: Bijay Sangat2021年8月22日
嗨,我有两个[X,Y,Z]坐标[0 3500 115]和[900 4000 113.5],这将帮助我创建一条线。现在我有了两个坐标,A=[700,2100,185]和[1500,3300,210]。所以我已经找到了,在A或B之外,哪个点靠近线段,并在离A或B最近的线段上坐标
谢谢

接受的答案

Wan霁
Wan霁 2021年8月21日
编辑:Wan霁 2021年8月22日
使用 point2segmentDistance 函数
函数[distance, nearestPointOnSeg]= point2segmentDistance(point, segmentPoint1, segmentPoint2)
点=点(:);
segmentPoint1 = segmentPoint1(:);
segmentPoint2 = segmentPoint2(:);
V = segmentPoint2 - segmentPoint1;
V1 = point - segmentPoint1;
V2 = point - segmentPoint2;
L1 =范数(V1);
L2 =范数(V2);
L =范数(V);
theta1 = acos(V'*V1/(L*L1));
theta2 = acos(-V'*V2/(L*L2));
如果(θ₁> =π/ 2)
距离= L1;nearestPointOnSeg = segmentPoint1;
elseif(θ> =π/ 2)
距离= L2;nearestPointOnSeg = segmentPoint2;
其他的
distance = L1*sin(theta1);
nearestPointOnSeg = segmentPoint1 + V/L * L1*cos(theta1);
结束
结束
然后在命令行中计算
P1 = [0 3500 115];
P2 = [900 4000 113.5];
PA =(700、2100、185);
Pb = [1500,3300,210];
[disA2Seg, A_nearestPseg] = point2segmentDistance(PA, P1, P2)
[disB2Seg, B_nearestPseg] = point2segmentDistance(PB, P1, P2)
plot3 ([P1 (1), P2(1)]、[P1 (2), P2(2)]、[P1 (3), P2 (3)),“r-o”“markerfacecolor”“r”“线宽”, 2)
持有
(P1(1), P1(2), P1(3),“P_1”);
text(P2(1), P2(2), P2(3),“P_2”);
text(PA(1), PA(2), PA(3),“P_A”);
文本(PB(1), PB(2), PB(3),“P_B”);
text(A_nearestPseg(1), A_nearestPseg(2), A_nearestPseg(3),“\_\_\_P(离A最近)”);
text(B_nearestPseg(1), B_nearestPseg(2), B_nearestPseg(3)+eps,“\_\_\_P(离B最近)”);
plot3 ([PA (1) A_nearestPseg(1)]、[A_nearestPseg PA(2),(2)]、[PA (3), A_nearestPseg (3)),...
“g-h”“markerfacecolor”‘g’“线宽”, 2)
plot3 ([PB (1) B_nearestPseg(1)]、[B_nearestPseg PB(2),(2)]、[PB (3), B_nearestPseg (3)),...
“台球”“markerfacecolor”“b”“线宽”, 2)
与答案
disA2Seg =
1.566812049991957 e + 03
A_nearestPseg =
0
3500
115
disB2Seg =
9.269909654360176 e + 02
B_nearestPseg =
1.0 e + 03 *
0.900000000000000
4.000000000000000
0.113500000000000
所以点B离线段更近。找到段上与点A或B最近的点。
7评论

登录评论。

更多答案(0)

类别

了解更多插值帮助中心而且文件交换

标签

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!