Geometry 如何得到两个矩形的穿透向量?

Geometry 如何得到两个矩形的穿透向量?,geometry,collision,rectangles,Geometry,Collision,Rectangles,假设我有两个矩形,x,y,w,h,一个静止,另一个在vx,vy移动。我已经计算过它们彼此重叠,我也知道重叠矩形。我感兴趣的是下图中的红色向量: 这与最小调整向量不同,因为正如您所看到的,最小调整只会向左移动,而红色向量会向左和向上移动。有没有一种有效的计算方法?运动矢量V0和穿透矢量V1是反平行的 所以你可以利用它: 其中,dx,dy是重叠区域的大小 if (|V0.x|>=|V0.y|) { V1.x=-sign(V0.x)*|dx| V1.y=-sign(V0.y)*|dx*V

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


这与最小调整向量不同,因为正如您所看到的,最小调整只会向左移动,而红色向量会向左和向上移动。有没有一种有效的计算方法?

运动矢量
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|
 }
if(|V0.x |>=|V0.y |)
{
V1.x=-符号(V0.x)*| dx|
V1.y=-符号(V0.y)*| dx*V0.y/V0.x|
}

如果(| V0.x |需要向量R.TopLeft-R.BottomRight,其中R是重叠矩形?