首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >得到两个矩形之间的向量

得到两个矩形之间的向量
EN

Stack Overflow用户
提问于 2011-09-29 10:02:12
回答 2查看 525关注 0票数 2

假设我有两个长方形如下:

  1. 一圈另一个
  2. ,它们共享至少两面(3面或全部4面也可能)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-29 10:13:10

如果我对你的理解是正确的,那么你应该遵循以下步骤:

  1. 找到了双方共享的角落。从内、外rectangles.
  2. vector = outerRecCorner - innerRecCorner

  • 的后角
票数 3
EN

Stack Overflow用户

发布于 2011-09-29 10:39:10

与其说是编程题,不如说是数学:)

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

代码语言:javascript
复制
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;
}

首先找到第一个共享的角落:

代码语言:javascript
复制
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;
  }
}

那就去找它的角土:

代码语言:javascript
复制
int oppositeCornerIndex = 0;
if(sharedCornerIndex ==0) oppositeCornerIndex = 3;
if(sharedCornerIndex ==3) oppositeCornerIndex = 0;
if(sharedCornerIndex ==1) oppositeCornerIndex = 2;
if(sharedCornerIndex ==2) oppositeCornerIndex = 1;

最后,获取向量(我没有检查代码的这一部分,但它应该能工作):

代码语言:javascript
复制
Vector v = new Vector();
v.X = cornersListB[oppositeCornerIndex].X - cornersListA[oppositeCornerIndex].X;
v.Y = cornersListB[oppositeCornerIndex].Y - cornersListA[oppositeCornerIndex].Y;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7595651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档