我正在尝试绘制由 3D 中两个平面的交点形成的线,但我无法理解数学,这已在此处和此处进行了解释。
我试图自己弄清楚,但最接近解决方案的是一个向量,它通过使用平面法线的叉积,指向与相交线相同的方向。我不知道如何在相交线上找到一个点,任何点都可以。我认为这种方法是死胡同。这是此尝试的屏幕截图:
我尝试使用这个问题中提到的解决方案,但它与原始解释有一个死链接,并且该等式对我不起作用(它有不平衡的括号,我试图在下面更正)。
var planeA = new THREE.Plane((new THREE.Vector3(0, 0, 1)).normalize(), 100);
var planeB = new THREE.Plane((new THREE.Vector3(1, 1, 1)).normalize(), -100);
var x1 = planeA.normal.x,
y1 = planeA.normal.y,
z1 = planeA.normal.z,
d1 = planeA.constant;
var x2 = planeB.normal.x,
y2 = planeB.normal.y,
z2 = planeB.normal.z,
d2 = planeB.constant;
var point1 = new THREE.Vector3();
point1.x = 0;
point1.z = (y2 / y1) * (d1 - d2) / (z2 - z1 * y2 / y1);
point1.y = (-z1 * point1.z - d1) / y1;
var point2 = new THREE.Vector3();
point2.x = 1;
point2.z = (y2 / y1) * (x1 * point2.x + d1) - (x2 * point2.x - d2) / (z2 - z1 * y2 / y1);
point2.y = (-z1 * point2.z - x1 * point2.x - d1) / y1;
console.log(point1, point2);
输出:
THREE.Vector3 {x: -1, y: NaN, z: NaN, …}
THREE.Vector3 {x: 1, y: Infinity, z: -Infinity, …}
预期输出:
- 沿交叉点 x = 0 的点,以及
- 同一行上的另一个点 x = 1
如果有人能指出我应该如何工作的一个很好的解释,或者一个平面 - 平面相交算法的例子,我将不胜感激。