【发布时间】:2018-03-16 08:51:29
【问题描述】:
对于 three.js 中的相机移动,我需要计算点 C,以便将相机从点 A 移动到一定距离 dist 到点 B。
【问题讨论】:
标签: javascript math 3d three.js
对于 three.js 中的相机移动,我需要计算点 C,以便将相机从点 A 移动到一定距离 dist 到点 B。
【问题讨论】:
标签: javascript math 3d three.js
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
【讨论】:
b加到dist上,因为你从b中减去dist似乎更符合逻辑
dist 是一个长度,它不是一个向量。要到达c,您从b 开始并添加一个长度为dist 的特定向量v。那个向量v 是c.subVectors( a, b ).setLength( dist )。
所以你需要计算点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 减去 'dist' 乘以方向为 AB 的单位向量。所以这很容易:
从 A 到 B 的向量 v 等于 (xB-xA, yB-yA, zB-zA) / 距离(AB)
然后 C = B - d*v 其中 d 是您希望 C 与 B 的距离。
【讨论】: