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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值