[英]Calculate point in 3d space, between two points at specific distance
对于three.js所照相机运动我需要计算点C
所以从点摄像机移动A
到一定距离dist
到点B
。
three.js的方法很容易做到。
假设a
, b
和c
是THREE.Vector3()
实例,
a.set( 2, 1, 4 );
b.set( 9, 4, 2 );
c.subVectors( a, b ).setLength( dist ).add( b );
three.js r.91
因此,您需要计算点C
的坐标,因为它位于B
和A
之间的直线上,且距B
的给定距离为? 使用以下步骤非常简单:
B
到A
的向量(这将是A - B
)。 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.