分离轴定理在Javascript中的实现
Separation Axis Theorem implementation in Javascript
我正在尝试对两个凸形状进行简单的碰撞检测测试。我的形状定义如下
var convex2 = [
{x:-0.1, y:-0.1},
{x: 0.12, y:-0.07},
{x: 0.22, y:0.0},
{x: 0.0, y:0.2},
{x:-0.1, y:0.12}
];
var convex = [
{x:-0.08, y:-0.07},
{x: 0.07, y:-0.06},
{x: 0.09, y: 0.08},
{x:-0.07, y: 0.09},
];
我有一个函数来检查两个多边形是否相互碰撞,并称之为
convexConvex(convex, convex2)
以下是我实现SPT 的尝试
首先,我是Javascript的初学者,所以如果我在语法方面做了错误的事情,请告诉我。
我已将投影轴定义为水平x轴(1,0)。我不确定这是否正确。
即使它们没有碰撞,函数也总是返回true。我做错了什么?
function convexConvex(p1, p2) {
//TODO
var axis = {x:1,y:0};
var p2MaxValue = Number.NEGATIVE_INFINITY;
var p2MinValue = Number.POSITIVE_INFINITY;
var p1MaxValue = Number.NEGATIVE_INFINITY;
var p1MinValue = Number.POSITIVE_INFINITY;
var p2MaxPoint; //Max point for P2
var p2MinPoint; //Min point for P2
var p1MaxPoint; //Max point for p1
var p1MinPoint; //Min point for p1
//find min and max points in shape p2
for(var i in p2)
{
var dotProduct = p2[i].x*axis.x + p2[i].y*axis.y;
if(dotProduct > p2MaxValue)
{
p2MaxValue = dotProduct;
p2MaxPoint = p2[i];
}
if(dotProduct < p2MinValue)
{
p2MinValue = dotProduct;
p2MinPoint = p2[i];
}
}
//find min and max points in shape p1
for(var i in p1)
{
var dotProduct = p1[i].x*axis.x + p1[i].y*axis.y;
if(dotProduct > p1MaxValue)
{
p1MaxValue = dotProduct;
p1MaxPoint = p1[i];
}
if(dotProduct < p1MinValue)
{
p1MinValue = dotProduct;
p1MinPoint = p1[i];
}
}
//compare the min and max projection values
if(p2MinValue < p1MaxValue || p2MaxValue < p1MinValue)
return true
return false;
}
由于p2MinValue
和p1MinValue
都从负无穷大开始,所以它们都不会取任何其他值。不,轴不能正确。
我找到了一篇很好的文章,并在可汗学院完成了我的表演:https://www.khanacademy.org/computer-programming/polygon-collision-detector/6339295315755008
相关文章:
- 绑定函数时在IE7中未实现Javascript错误
- 可以't实现JavaScript翻转计数器
- 如何实现 Javascript 自动完成功能
- 实现JavaScript内部方法的源代码
- 当实现javascript倒计时时,其他html元素将消失
- 在aspx页面中实现javascript时出现问题
- 这是实现javascript字符串长度属性的正确方法吗
- 将递归函数转换为异步 CPS 实现 (javascript)
- 如何在Wordpress中实现javascript
- 在jQuery方法中实现Javascript变量
- 无法实现 JavaScript 代码
- 在 Rails 应用程序中实现 JavaScript 库
- 如何实现 JavaScript 对象继承
- 我将如何实现JavaScript
- 当浏览器开始实现JavaScript时,如何在支持一两个版本较旧的浏览器的同时开始使用它们
- 有没有其他方法可以在纯python中实现javascript的onClick()函数
- 如何在JavaCC中实现JavaScript自动分号插入
- 响应式网页设计 - 如何实现JavaScript部分
- 用Selfish实现Javascript中的简单继承
- 如何实现JavaScript/ECMAScript“;这里没有线路终止器”;JavaCC中的规则