得到两个矩形之间的向量
本文关键字:之间 向量 两个 | 更新日期: 2023-09-27 18:10:05
假设我有两个矩形,如下所示:
- 一个包含另一个
- 它们共享至少2个边(3个或全部4个也可能)
我如何得到描述内矩形向上移动到非共享边所需的位移的向量?
如果我没理解错的话,那么你应该按照下面的步骤来做:
- 找到两边共享的角。
- 从内矩形和外矩形获得对角
-
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;