找到适合矩形的给定四边形的最小四边形

时间:2011-04-22 12:10:36

标签: c# geometry gdi polygon

我正在使用C#(VS 2008)中使用GDI +的成像应用程序,我遇到了困难。我的画布上有一个矩形,画布上有一个随机大小的四边形。我知道矩形和四边形的4个角点。我需要计算适合我的矩形的最小四边形。新的四边形需要从我已经在画布上的四边形计算出来。新的四边形不一定是我现有四边形的缩放版本,但输入和输出四边形的边必须是平行的。我上传了一张图片来描述问题。

http://www.4shared.com/photo/dufR-UeN/SmallQuad.html

我有什么想法可以解决这个问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

好的,让ABCD成为定义随机四边形的点:

  • 1是段[AB]
  • 2是段[BC]
  • 3是段[CD]
  • 4是段[DA]

现在让E(左上角),F(右上角),G(左下角),H(右下角)成为矩形的点。在您的图片中,您必须确定:

  • 通过E的平行方程1(让我们称之为1')
  • 通过F的平行于2的等式(让我们称之为2')
  • 通过G的平行于3的等式(我们称之为3')
  • 通过H的平行方程4(让我们称之为4')

然后你可以计算它们的交叉点,从而为你提供所需的线条。

让我们确定1'(其他的相似):所有与1平行的线都具有与1相同的斜率。此斜率s1由下式给出:

s1 = (yB - yA) / (xB - xA)

然后1'有一个像y = s1 * x + b这样的等式。由于我们希望此行达到E(xE, yE)点,因此我们有b

yE = s1 * xE + b => b = yE - s1 * xE

然后1'有等式:y = s1 * (x - xE) + yE。同样,2'代表等式y = s2 * (x - xF) + yFs2BC的坐标确定,3'和4'的坐标确定。

我们现在想要1'和2'的交集:这个点I有坐标验证这两行的方程,所以:

yI = s1 * (x - xE) + yE
yI = s2 * (x - xF) + yF

所以:

s1 * (xI - xE) + yE = s2 * (xI - xF) + yF

为您提供xI然后yI

xI = (s1 * xE - s2 * xF + yF - yE) / (s1 - s2)
yI = s2 * (xI - xF) + yF
   = (s1 * s2 * xE - s1 * s2 * xF + s1 * yF - s2 * yE) / (s1 - s2)

您可以确定J(2'和3'的交点),K(3'和4'的交点)和L(4'和4'的交点)的坐标1')同样的方式。您想要的四边形由这4个点IJKL组成。