需求:判断两个面是否相交,使用叉积进行判断
const testIntersection = (polyOne, polyTwo) => {
// 创建两个多边形
let polygon1 = [[0, 0], [0, 1], [1, 1], [1, 0], [0, 0]];
let polygon2 = [[0.5, 0.5], [0.5, 1.5], [1.5, 1.5], [1.5, 0.5], [0.5, 0.5]];
// 检查每一条边
for (let i = 0; i < polygon1.length - 1; i++) {
for (let j = 0; j < polygon2.length - 1; j++) {
let line1 = {a: polygon1[i], b: polygon1[i + 1]};
let line2 = {a: polygon2[j], b: polygon2[j + 1]};
// 计算向量
let r = [line1.b[0] - line1.a[0], line1.b[1] - line1.a[1]];
let s = [line2.b[0] - line2.a[0], line2.b[1] - line2.a[1]];
// 计算叉积
let cross = r[0] * s[1] - r[1] * s[0];
// 如果叉积为0,那么线段是平行的
if (cross === 0) continue;
// 计算参数t和u
let t = ((line2.a[0] - line1.a[0]) * s[1] - (line2.a[1] - line1.a[1]) * s[0]) / cross;
let u = ((line2.a[0] - line1.a[0]) * r[1] - (line2.a[1] - line1.a[1]) * r[0]) / cross;
// 如果0 <= t <= 1且0 <= u <= 1,那么线段相交
if (0 <= t && t <= 1 && 0 <= u && u <= 1) {
console.log('相交');
return true;
}
}
}
console.log('不相交');
return false;
}