计算特定距离

时间:2018-03-15 23:39:51

标签: javascript math 3d three.js

对于three.js中的相机移动,我需要计算点C,以便将相机从点A移动到特定距离dist到点B

scheme showing the point to find

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

  • 计算从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);




答案 2 :(得分:0)

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

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

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