C# 从给定的适合矩形的四边形中找出最小的四边形
我正在使用C#(VS 2008)中的GDI+开发一个成像应用程序,我遇到了一些问题。我的画布上有一个矩形,画布上有一个任意大小的四边形。我知道矩形和四边形的四个角点。我需要计算出适合我的矩形的最小四边形。新的四边形需要根据画布上已有的四边形进行计算。新四边形不需要是现有四边形的缩放版本,但输入和输出四边形的边必须平行。我上传了一张图片来描述这个问题 你知道我该怎么做吗C# 从给定的适合矩形的四边形中找出最小的四边形,c#,geometry,gdi,polygon,C#,Geometry,Gdi,Polygon,我正在使用C#(VS 2008)中的GDI+开发一个成像应用程序,我遇到了一些问题。我的画布上有一个矩形,画布上有一个任意大小的四边形。我知道矩形和四边形的四个角点。我需要计算出适合我的矩形的最小四边形。新的四边形需要根据画布上已有的四边形进行计算。新四边形不需要是现有四边形的缩放版本,但输入和输出四边形的边必须平行。我上传了一张图片来描述这个问题 你知道我该怎么做吗 提前感谢。好的,让A,B,C,D作为定义随机四边形的点: 1是段[AB] 2是段[BC] 3是段[CD] 4是段[DA]
提前感谢。好的,让
A
,B
,C
,D
作为定义随机四边形的点:
- 1是段[AB]
- 2是段[BC]
- 3是段[CD]
- 4是段[DA]
E
(左上)、F
(右上)、G
(左下)、H
(右下)作为矩形的点。在您的图像中,您必须确定:
- 平行于1经过
(我们称之为1')的方程E
- 平行于2经过
(我们称之为2')的方程F
- 平行于3的方程经过
(我们称之为3')G
- 平行于4经过
(我们称之为4')的方程H
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
的坐标确定,idem表示3'和4'
我们现在需要1'和2'的交点:该点I
具有坐标,以验证这两条线的方程式,因此:
yI = s1 * (x - xE) + yE
yI = s2 * (x - 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'和1'的交点)的坐标。你想要的四边形是由这4个点组成的,这是我一个月以来看到的最棒的答案。jamietre,你必须在+1感谢你的评论!那是超快的伊曼纽尔。非常感谢你的努力。但根据你的描述,我试过随机画。查看此链接:如何解决此问题?再次感谢艾曼纽。
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)