本文记录一些常见的相交判断方法,属于游戏开发中比较常见的几何应用。
目录
一、线段之间的相交判断:
问题,如下图,如何判断线段AB和CD是否相交?
解答:线段之间的相交判断一般使用以下夹持法思路:
1、假如ABC保持现有位置,D可移动,那么穿透交叉的条件就是D在AB的另外一侧(异于C),且CD夹持于射线CA、CB之间
2、假如ACD保持现有位置,B可移动,那么穿透交叉的条件就是B在CD的另外一侧(异于A),且AB夹持于射线AD、AC之间
总结1、2,可以说成:
A、B两点分布于直线CD的两侧,C、D点分布于直线AB的两侧,形成互相夹持。
理清思路再去找相应的公式:
由于2D矢量的叉积是一个标量,上述1、2的夹持条件,可以由以下简单的叉积公式来体现:
Vcd.Cross(Vca) * Vcd.Cross(Vcb) < 0 && Vab.Cross(Vad) * Vab.Cross(Vac) < 0
这里的<也可以是<=