【问题标题】:Find smallest quadrilateral from a given quadrilateral that fits a rectangle从给定的四边形中找到适合矩形的最小四边形
【发布时间】:2011-04-22 12:10:36
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

    标签: c# geometry gdi polygon


    【解决方案1】:

    好的,让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'和1'的交点)的坐标.你想要的四边形由IJKL这4个点组成。

    【讨论】:

    • 这是一个月来我在 SO 上看到的最棒的答案。您必须在mathoverflow.net +1 上闲逛
    • 感谢您的精彩评论,jamietre!
    • 那是超级快的伊曼纽尔。非常感谢你的努力。但根据你的描述,我尝试了随机图纸。查看此链接:4shared.com/photo/7b0CphrR/SmallQuad2.html 我该如何解决?再次感谢伊曼纽尔。
    猜你喜欢
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    相关资源
    最近更新 更多