我正在使用C#(VS 2008)中使用GDI +的成像应用程序,我遇到了困难。我的画布上有一个矩形,画布上有一个随机大小的四边形。我知道矩形和四边形的4个角点。我需要计算适合我的矩形的最小四边形。新的四边形需要从我已经在画布上的四边形计算出来。新的四边形不一定是我现有四边形的缩放版本,但输入和输出四边形的边必须是平行的。我上传了一张图片来描述问题。
http://www.4shared.com/photo/dufR-UeN/SmallQuad.html
我有什么想法可以解决这个问题吗?
提前致谢。
答案 0 :(得分:2)
好的,让A
,B
,C
,D
成为定义随机四边形的点:
现在让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) + yF
,s2
由B
和C
的坐标确定,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个点I
,J
,K
和L
组成。