得到两个矩形之间的向量

本文关键字:之间 向量 两个 | 更新日期: 2023-09-27 18:10:05

假设我有两个矩形,如下所示:

  1. 一个包含另一个
  2. 它们共享至少2个边(3个或全部4个也可能)

我如何得到描述内矩形向上移动到非共享边所需的位移的向量?

得到两个矩形之间的向量

如果我没理解错的话,那么你应该按照下面的步骤来做:

  1. 找到两边共享的角。
  2. 从内矩形和外矩形获得对角
  3. vector = outerRecCorner - innerRecCorner

这更像是一个数学问题而不是编程问题:)

假设你有两个矩形:A(内)和B(外)。它们有四个角:

Point [] GetCorners (Rectangle rect)
{
   Point [] corners = new Point[4];
   Point corners[0] = new Point(rect.X, rect.Y);
   Point corners[1] = new Point(rect.X + rect.Width, rect.Y);
   Point corners[2] = new Point(rect.X, rect.Y + rect.Height);
   Point corners[3] = new Point(rect.X + rect.Width + rect.Width, rect.Y);
   return corners;
}

首先找到第一个共享角:

Point [] cornersListA = GetCorners(A);
Point [] cornersListB = GetCorners(B);
int sharedCornerIndex = 0;
for (int i=0; i<4; i++)
{
  if(cornersListA[i].X==cornersListB[i].X && cornersListA[i].Y==cornersListB[i].Y)
  {
     sharedCornerIndex = i;
     break;
  }
}

然后找到它对面的角:

int oppositeCornerIndex = 0;
if(sharedCornerIndex ==0) oppositeCornerIndex = 3;
if(sharedCornerIndex ==3) oppositeCornerIndex = 0;
if(sharedCornerIndex ==1) oppositeCornerIndex = 2;
if(sharedCornerIndex ==2) oppositeCornerIndex = 1;

最后,get vector(我没有检查这部分代码,但它应该可以工作):

Vector v = new Vector();
v.X = cornersListB[oppositeCornerIndex].X - cornersListA[oppositeCornerIndex].X;
v.Y = cornersListB[oppositeCornerIndex].Y - cornersListA[oppositeCornerIndex].Y;