算法"/>
python碰撞检测算法
/*: 作者:第四梦境
* 六种碰撞检测算法实现,MIT协议发布,即可以商用、可以修改
*
*/
//**碰撞检测代码组S**\\
//三角形与三角形的碰撞检测
function isTOT (t1,t2) {
var txls = [[],[]]; var czxls = [[[],[],[]],[[],[],[]]];
txls[0] = [[t1[2] - t1[0],t1[3] - t1[1]],[t1[4] - t1[2],t1[5] - t1[3]],[t1[0] - t1[4],t1[1] - t1[5]]];
txls[1] = [[t2[2] - t2[0],t2[3] - t2[1]],[t2[4] - t2[2],t2[5] - t2[3]],[t2[0] - t2[4],t2[1] - t2[5]]];
//获取垂直向量
for (var i = 0; i < 2; i++) {
for (var j = 0; j < 3; j++) {
czxls[i][j] = [-txls[i][j][1],txls[i][j][0]];
//如果为零向量,将其方向坍缩
if (Math.pow(czxls[i][j][0],2) + Math.pow(czxls[i][j][1],2) == 0) czxls[i][j] = [1,0];
}
}
//如果三个垂直向量共线,则将其中一个转90°
for (var i = 0; i < 2; i++) {
if (czxls[i][1][0]*czxls[i][0][1] - czxls[i][0][0]*czxls[i][1][1] == 0 && czxls[i][1][0]*czxls[i][2][1] - czxls[i][2][0]*czxls[i][1][1] == 0) {
czxls[i][1] = [-czxls[i][1][1],czxls[i][1][0]];
}
}
//检测碰撞(分离轴)
for (var i = 0; i < 2; i++) {
for (var j = 0; j < 3; j++) {
var d1,min1,max1;
min1 = max1 = czxls[i][j][0] * t1[0] + czxls[i][j][1] * t1[1];
d1 = czxls[i][j][0] * t1[2] + czxls[i][j][1] * t1[3];
min1 = d1 < min1 ? d1 : min1;
max1 = d1 > max1 ? d1 : max1;
d1 = czxls[i][j][0] * t1[4] + czxls[i][j][1] * t1[5];
min1 = d1 < min1 ? d1 : min1;
max1 = d1 > max1 ? d1 : max1;
var d
更多推荐
python碰撞检测算法
发布评论