【发布时间】:2013-04-08 04:24:30
【问题描述】:
我试图在 3D 中绘制由两个平面的交点形成的线,但我无法理解数学,这已在 here 和 here 进行了解释。
我试图自己弄清楚,但最接近解决方案的是一个向量,它使用平面法线的叉积,指向与相交线相同的方向。我不知道如何在相交线上找到一个点,任何点都可以。我认为这种方法是死胡同。这是此尝试的屏幕截图:
我尝试使用this 问题中提到的解决方案,但它与原始解释有一个死链接,并且该等式对我不起作用(它有不平衡的括号,我试图在下面更正)。
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
如果有人能指出这应该如何工作的一个很好的解释,或者一个平面-平面相交算法的例子,我将不胜感激。
【问题讨论】:
-
如果你只让
x = 0在两个平面方程中,你可以找到对应于x的y和z。对x = 1重复此操作。
标签: algorithm math 3d three.js linear-algebra