该方法用于判断平面(Plane)和直线(Line)是否相交,并返回相交点坐标。
plane.intersectsLine(line, target)
line
:输入直线(Line)对象,由该对象确定直线的起始点和方向。target
:可选参数。输出交点的三维向量(Vector3)对象。line
参数为空或不是Line
类型,会抛出类型错误(TypeError)异常。var plane = new THREE.Plane(new THREE.Vector3(0, 1, 0), 0); // 创建一个平面
var line = new THREE.Line3(new THREE.Vector3(-10, 0, 0), new THREE.Vector3(10, 0, 0)); // 创建一条直线
var point = new THREE.Vector3(); // 创建一个向量来存储交点坐标
var isIntersected = plane.intersectsLine(line, point); // 判断直线是否和平面相交,并保存交点坐标到point向量中
if (isIntersected) {
console.log('直线与平面相交,交点坐标为', point);
} else {
console.log('直线与平面不相交');
}
这个方法的实现很简单,我们来看一下源代码:
intersectsLine: function ( line, target ) {
var v1 = new Vector3();
var diff = new Vector3();
var div = this.normal.dot( line.delta( v1 ) );
if ( div === 0 ) return target !== undefined ? undefined : false;
var distance = - this.distanceToPoint( line.start ) / div;
if ( target !== undefined ) {
line.at( distance, target );
}
return true;
}
可以看到,在这个方法中,会根据平面的法向量(normal)和直线的差向量(delta)计算直线与平面的夹角,如果夹角为0,则认为直线和平面平行不相交;如果夹角不为0,则根据距离公式计算直线与平面的交点坐标。
具体实现过程如下:
target
参数指定的向量中;