Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从给定的适合矩形的四边形中找出最小的四边形_C#_Geometry_Gdi_Polygon - Fatal编程技术网

C# 从给定的适合矩形的四边形中找出最小的四边形

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]

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

你知道我该怎么做吗


提前感谢。

好的,让
A
B
C
D
作为定义随机四边形的点:

  • 1是段[AB]
  • 2是段[BC]
  • 3是段[CD]
  • 4是段[DA]
现在让
E
(左上)、
F
(右上)、
G
(左下)、
H
(右下)作为矩形的点。在您的图像中,您必须确定:

  • 平行于1经过
    E
    (我们称之为1')的方程
  • 平行于2经过
    F
    (我们称之为2')的方程
  • 平行于3的方程经过
    G
    (我们称之为3')
  • 平行于4经过
    H
    (我们称之为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
的坐标确定,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)