如何获取Three.js平面内指定X、Y坐标点的Z坐标?
求解平面内已知X、Y坐标点的Z值
我已经通过三个点计算出3D平面,代码如下:
const { Vector3, Plane } = require('three') const points = [new Vector3(0, 0, 0), new Vector3(1, 0, 1), new Vector3(1, 2, 0)] const plane = new Plane().setFromCoplanarPoints(...points)
现在需要获取该平面内第四个点(已知X=0.75,Y=0.75,求Z值)的坐标,但尝试用projectPoint方法未得到预期结果:
const targetPoint = new Vector3() plane.projectPoint(new Vector3(0.75, 0.75, 0), targetPoint) /* 返回结果,X、Y被改变,不符合需求 Vector3 { x: 0.5833333333333334, y: 0.8333333333333334, z: 0.16666666666666666 } */
正确解法:利用平面方程计算Z值
Three.js中Plane的定义为 normal.x * x + normal.y * y + normal.z * z + constant = 0,通过这个方程可以解出固定X、Y时的Z值:
const x = 0.75; const y = 0.75; // 从平面方程推导Z的计算公式 const z = -(plane.normal.x * x + plane.normal.y * y + plane.constant) / plane.normal.z; const targetPoint = new Vector3(x, y, z); // 可选:验证点是否在平面上,结果应趋近于0 console.log(plane.distanceToPoint(targetPoint));
说明
projectPoint方法的作用是将输入点垂直投影到平面上,因此会改变X、Y坐标以满足垂直条件,这和我们固定X、Y求Z的需求不符,所以需要用平面方程直接计算。
TurfJS主要面向2D地理空间数据处理,对于3D平面的这类计算没有适配的原生方法,推荐使用上述Three.js的方案。
内容的提问来源于stack exchange,提问作者João Pimentel Ferreira
相关产品推荐
相关产品推荐

