繁体   English   中英

计算3d空间中特定距离的两个点之间的点

[英]Calculate point in 3d space, between two points at specific distance

对于three.js所照相机运动我需要计算点C所以从点摄像机移动A到一定距离dist到点B

显示要寻找的点的方案

three.js的方法很容易做到。

假设abcTHREE.Vector3()实例,

a.set( 2, 1, 4 );
b.set( 9, 4, 2 );

c.subVectors( a, b ).setLength( dist ).add( b );

three.js r.91

因此,您需要计算点C的坐标,因为它位于BA之间的直线上,且距B的给定距离为? 使用以下步骤非常简单:

  • 计算从BA的向量(这将是A - B )。
  • 归一化该向量(使其长度为1)。
  • 乘以所需的距离。
  • 将该向量添加到点B

所以一个简短的JavaScript示例:

 const A = [2, 1, 4]; const B = [9, 4, 2]; const dist = 3; function addVectors(v1, v2) { return v1.map((x, i) => x + v2[i]); } function scalarMultiply(v, c) { return v.map(x => x*c); } function getLength(v) { return Math.hypot(...v); } const vecB2A = addVectors(A, scalarMultiply(B, -1)); // Step 1 const normB2A = scalarMultiply(vecB2A, 1/getLength(vecB2A)); // Step 2 const distB2A = scalarMultiply(normB2A, dist); // Step 3 const C = addVectors(B, distB2A); // Final step console.log(C); 

点C等于点B减去“距离”乘以方向为AB的单位矢量。 所以这很容易:

从A到B的向量v等于(xB-xA,yB-yA,zB-zA)/距离(AB)

然后C = B-d * v,其中d是您想要C到B的距离。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM