【问题标题】:How to get penetration vector of two rects?如何获得两个矩形的穿透向量?
【发布时间】:2014-11-18 03:40:10
【问题描述】:

假设如果我有两个带有 x,y,w,h 的矩形,一个是静止的,另一个在 vx,vy 处移动。我已经计算出它们相互重叠,我也知道重叠矩形。我感兴趣的是下图中的红色向量:

这与最小调整向量不同,因为如您所见,最小调整只会将矩形 A 向左移动,而红色向量会向左和向上移动它。有没有一种有效的方法来计算这个?

【问题讨论】:

  • 是否需要向量只是R.TopLeft-R.BottomRight,其中R是重叠矩形?

标签: geometry collision rectangles


【解决方案1】:

运动矢量V0和穿透矢量V1是反平行的

所以你可以利用它: 其中dx,dy 是重叠区域的大小,所以

if (|V0.x|>=|V0.y|)
 {
 V1.x=-sign(V0.x)*|dx|
 V1.y=-sign(V0.y)*|dx*V0.y/V0.x|
 }

if (|V0.x|<|V0.y|)
 {
 V1.y=-sign(V0.y)*|dy|
 V1.x=-sign(V0.x)*|dy*V0.x/V0.y|
 }

希望我没有犯一些愚蠢的错误,但无论如何背后的想法应该是直截了当的。如果不制作V0 的参数线方程...您也可以为此利用dot 产品,但这应该会导致相同的结果...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 2015-04-19
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多