Vector 按距离单位(而不是3.js中的因子)对2矢量3进行线性插值
对于任何措辞和不正确的引用,我深表歉意,三维数学对我来说是全新的 问题:Vector 按距离单位(而不是3.js中的因子)对2矢量3进行线性插值,vector,three.js,interpolation,Vector,Three.js,Interpolation,对于任何措辞和不正确的引用,我深表歉意,三维数学对我来说是全新的 问题: 我在3D空间中有两点A:(1,2,3)和B:(6,5,4) 我有一段距离L:10 在L的单元处,定义为A向B的3D点C是什么 注: L的距离不是a或B之间距离的一个因素,这里。lerp()不是合适的工具 L可以大于或小于A和B之间的距离 我使用的是THREE.js,但是欢迎使用任何语言示例 迄今为止的工作情况: 计算A和B之间的距离->D 获取与目标值L->R相关的D系数 使用因子R将.lerp()与A一起应用于
- 我在3D空间中有两点A:
和B:(1,2,3)
(6,5,4)
- 我有一段距离L:10
- 在L的单元处,定义为A向B的3D点C是什么
- L的距离不是a或B之间距离的一个因素,这里
不是合适的工具。lerp()
- L可以大于或小于A和B之间的距离
THREE.js
,但是欢迎使用任何语言示例
迄今为止的工作情况:
- 计算A和B之间的距离->D
- 获取与目标值L->R相关的D系数
- 使用因子R将.lerp()与A一起应用于B
您可以通过提供的方法实现这一点
- 首先你可以减去vecB-vecA得到一个平行向量,它起源于(0,0,0)
- 其次,使用
将此向量转换为“单位向量”,这意味着无论它指向哪个方向,其长度始终为1normalize()
- 第三,将向量乘以L,因此
length=1*L
- 最后,使用
将此新平行向量移回其初始位置,以获得最终位置。它将降落在A和B创建的线段的内部或外部+vecA
var-vecA=new-THREE.Vector3(1,2,3);
var vecB=新的三个向量3(6,5,4);
var L=10;
//创建新向量
变量方向=新的三个向量3();
//分配位置B
指示。副本(vecB);
//减去位置a得到从(0,0,0)开始的向量
指导小组(vecA);
//规格化以获得长度=1的向量
方向。规范化();
//乘以新长度
方向。多重刻度(L);
//添加位置A以将向量返回初始起点
方向。添加(vecA);
//输出到日志以查看结果
console.log(direction.toArray())代码>
谢谢,我刚才通过使用.lerp()
扩展了工作,但传入了一个比率值,例如:
function lerpUnit (vectorA, vectorB, intendedDistance ) {
const aToBDistance = vectorA.distanceTo(vectorB)
const adjustedFactor = intendedDistance / aToBDistance
return new THREE.Vector3().lerpVectors(vectorA, vectorB, adjustedFactor)
}
或1行:const vectorC=new THREE.Vector3().lerpVectors(vectorA,vectorB,intendedDistance/vectorA.distanceTo(vectorB))
一行:var C=new THREE.Vector3().copy(vecA).addScaledVector(new THREE.Vector3().subVectors(vecB,vecA).normalize(),L)代码>:)
function lerpUnit (vectorA, vectorB, intendedDistance ) {
const aToBDistance = vectorA.distanceTo(vectorB)
const adjustedFactor = intendedDistance / aToBDistance
return new THREE.Vector3().lerpVectors(vectorA, vectorB, adjustedFactor)
}