问题标签 [separating-axis-theorem]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
20 回答
97621 浏览

algorithm - 检测两个矩形相交的算法?

我正在寻找一种算法来检测两个矩形是否相交(一个以任意角度,另一个只有垂直/水平线)。

测试一个角落是否在另一个几乎可以工作。如果矩形形成十字形状,则失败。

避免使用线的斜率似乎是个好主意,这需要垂直线的特殊情况。

0 投票
1 回答
1711 浏览

ios - Objective-C检查旋转的UIViews的子视图是否相交?

我不知道从哪里开始。显然CGRectIntersectsRect在这种情况下不起作用,你会明白为什么。

我有一个 UIView 的子类,其中有一个 UIImageView,它位于 UIView 的确切中心:

旋转前的 UIView

然后我旋转自定义 UIView 以保持内部 UIImageView 的框架,同时仍然能够执行 CGAffineRotation。生成的框架如下所示:

旋转后的 UIView

我需要防止用户使这些 UIImageViews 相交,但我不知道如何检查两个 UIImageViews 之间的交集,因为它们的框架不仅不适用于父 UIView,而且它们在不影响它们的框架的情况下旋转。

我尝试的唯一结果是不成功。

有任何想法吗?

0 投票
1 回答
944 浏览

ios - 确定裁剪矩形是否完全包含在旋转的 UIView 中

前提:我正在构建一个裁剪工具,可以处理图像的两指任意旋转以及任意裁剪。

有时图像最终会以插入空白空间以填充旋转图像和裁剪矩形之间的间隙的方式旋转(参见下面的示例)。

我需要确保图像视图在旋转时完全适合裁剪矩形。如果没有,我需要重新转换图像(缩放),使其适合裁剪范围。

使用这个答案,我实现了检查旋转的 UIImageView 是否与裁剪 CGRect 相交的能力,但不幸的是,这并不能告诉我裁剪矩形是否完全包含在旋转的 imageview 中。希望我可以对这个答案进行一些简单的修改?

OK的视觉示例:

在此处输入图像描述

不好,我需要检测和处理:

在此处输入图像描述

更新:不工作的方法

0 投票
1 回答
230 浏览

collision-detection - 分离轴定理算法不起作用

根据以下指南编写分离轴实现,使用 Haxe。似乎无法弄清楚为什么它不工作,测试了各个部分,但即使没有任何碰撞,它也总是返回 true。

任何帮助表示赞赏!:D

0 投票
1 回答
446 浏览

c++ - 分离轴定理:绕质心旋转

问题出在Polygon::FindAxisLeastPenetration

}

polygon.rotationMatrixMatrix22是一个 2x2 矩阵类型的对象。
polygon.points充满std::vector<Vector2D>了向量。
polygon.body是指向Object实例的指针。在这种情况下,它仅用于获取位置。
polygon.body->positionVector2D包含XY坐标的一个实例。
Vector2D polygon.body->GetPosition()返回身体的位置向量。

它工作正常,除了旋转是围绕[0, 0]点完成的,但它应该围绕质心旋转。

我知道围绕一个点旋转可以这样完成:

渲染多边形时效果很好。但不在碰撞检测中。

在这种情况下,如何围绕某个点旋转矢量?

编辑:这是我到目前为止所拥有的

现在我并不真正关心优化。还有同样的问题。围绕中心旋转时,无法正确检测到碰撞。但是,如果中心已[0, 0]使用或未使用,则碰撞检测正常工作,但再次执行错误的旋转。

编辑:即使在碰撞检测之前旋转,我也会遇到同样的问题。到目前为止,最好的方法是平移多边形,使其中心位于[0, 0],但在某些角度不会检测到碰撞。不知道现在该怎么办。

编辑:屏幕截图(多边形正在被平移,因此它们的质心始终位于[0, 0],在这种情况下多边形是矩形)碰撞检测在这里效果不佳 碰撞检测在这里效果不佳

碰撞检测在这里也不能很好地工作 碰撞检测在这里也不能很好地工作

碰撞检测在这里运行良好 碰撞检测在这里运行良好

编辑:我添加了Rectangle课程。

0 投票
1 回答
772 浏览

python - SAT 最小平移向量不正确

SAT 的最小平移向量在所有情况下总是正确和精确的吗?我通过迭代所有可能的轴并检查每个轴上的重叠来计算它,然后跟踪哪个轴具有最短的重叠并将其用作穿透向量。

如您所见,最小平移向量的某些计算并不总是正确的。

在这个简短的摘录中,我找到了渗透向量,我希望你们能帮助我找出问题所在:

在其他地方,我使用以下代码行来获取我的向量值:

0 投票
1 回答
533 浏览

python - 计算 2D 碰撞后的合成速度矢量

目前我有一个迷你物理游戏,它使用分离轴定理进行碰撞检测和响应,但是当我发现没有太多关于使用 SAT 碰撞与另一个形状碰撞后物体的速度会发生什么的文档时,我陷入了停顿检测。

这是我正在谈论的两个图表。

在此处输入图像描述

在此处输入图像描述

谁能指出我正确的方向?

碰撞后能给出的所有信息都是最小穿透向量。

编辑:在网上找到了一些与此非常相关的代码,但我不明白:

0 投票
0 回答
232 浏览

matlab - matlab中的分离轴

我一直致力于在 matlab 中实现分离轴算法。我已经搜索了很多,但我没有提出任何解决方案。你能指出错误吗?提前致谢

0 投票
0 回答
101 浏览

c - 二维凸多边形的分离

我试图找出两个凸多边形是否相交。我读到最有效的方法之一是使用分离轴的方法。我在这本书http://www.geometrictools.com/Documentation/MethodOfSeparatingAxes.pdf中找到了一些代码,但我有点困惑。函数 Dot 有什么作用?

0 投票
0 回答
435 浏览

algorithm - 分离轴定理的时间复杂度

您将如何根据多边形(三角形)的数量来确定复杂性?请在此处更正或确认我的方法。假设我们有一个金字塔并开始添加一个顶点。从六个顶点我看到这样的模式:

在 SAT 中,我将对象的每个顶点投影到它的每个法线。所以公式是 N*V ,其中 N 与多边形数相同,所以:

这个对吗?如果是这样,这是什么样的复杂性?我应该称它为二次和线性的组合吗?谢谢。

编辑:现在看它,我想这取决于我如何进行三角测量,它也可能是:

不确定它是否最小,但它不应该改变复杂性。这只是一个常数。所以可能是 V*2-A。请让我知道是否有某种公式。我发现了也处理边缘的欧拉多面体公式。