Three.js 获取点在曲线上的位置
我有一个CatmullRomCurve3,它是由向量3点数组创建的Three.js 获取点在曲线上的位置,three.js,Three.js,我有一个CatmullRomCurve3,它是由向量3点数组创建的 const curve = new THREE.CatmullRomCurve3(points); 我想知道这些点在曲线上的位置(范围从0到1)。基本上与.getPointAt()相反,第一个点在0,最后一个点在1 我想这样做是为了在用于创建曲线的每个点之间将曲线细分为相等数量的线段。例如,在点0和点1之间获得10个细分,在点1和点2之间获得10个细分,依此类推。我相信有一种数学方法可以解决您的问题,但简单的解决方法是: 使用
const curve = new THREE.CatmullRomCurve3(points);
我想知道这些点在曲线上的位置(范围从0到1)。基本上与.getPointAt()
相反,第一个点在0,最后一个点在1
我想这样做是为了在用于创建曲线的每个点之间将曲线细分为相等数量的线段。例如,在点0和点1之间获得10个细分,在点1和点2之间获得10个细分,依此类推。我相信有一种数学方法可以解决您的问题,但简单的解决方法是:
Vector3
s创建原始曲线Vector3
处停止// Create original curve
var curve = new THREE.CatmullRomCurve3( [
new THREE.Vector3( -10, 0, 10 ),
new THREE.Vector3( -5, 5, 5 ),
new THREE.Vector3( 0, 0, 0 ),
new THREE.Vector3( 5, -5, 5 ),
new THREE.Vector3( 50, 0, 50 )
], false );
var searchPoint = new THREE.Vector3( 5, -5, 5 ); // Point we're looking for
var searchArray = []; // Array for second curve
var uPosition = null; // Result is null for now
// Loop through curve.points to find our final point
for(var i = 0; i < curve.points.length; i++){
searchArray.push(curve.points[i]);
// Exit loop once point has been found
if(searchPoint.equals(curve.points[i])){
// Create shorter curve that stops at desired point
var curve2 = new THREE.CatmullRomCurve3(searchArray);
// Result is short length / original length
uPosition = curve2.getLength() / curve.getLength();
break;
}
}
// Result is null if position not found
console.log(uPosition);
//创建原始曲线
var曲线=新的三条。CatmullRomCurve3([
新的三矢量3(-10,0,10),
新的三矢量3(-5,5,5),
新的三个矢量3(0,0,0),
新的三个向量3(5,-5,5),
新三,矢量3(50,0,50)
],假);
var searchPoint=new-THREE.Vector3(5,-5,5);//我们要找的重点
var searchArray=[];//第二条曲线的数组
var upposition=null;//目前结果为空
//通过curve.points循环找到我们的终点
对于(变量i=0;i
让我直说吧;你有一条曲线,你想知道每个顶点的位置,但不是在x-y-z坐标中,而是在曲线上以0%-100%的进度?如果是这样,您是需要在创建曲线的过程中计算它,还是需要在已经生成曲线之后再找出这些值?@Marquizzo Correct。我自己生成曲线,所以我知道“xyz”。因此,可以在创建期间或之后计算该值。谢谢你的解决办法。因为我需要组成曲线的所有节点的位置,所以我可以将它们增量地添加到点
数组中,并在每一步之后获得长度。我将等待接受答案,看看是否有合适的方法,但我对此表示怀疑。如果毕竟,upposition
不是null
,将curve。getPoint(upposition)
给出与搜索点
相同的向量?