2011-04-22 156 views
1

我正在使用C#(VS 2008)中的GDI +進行成像應用程序工作,並且遇到了一些問題。我的畫布上有一個矩形,畫布上有一個隨機大小的四邊形。我知道矩形和四邊形的4個角點。我需要計算適合我的矩形的最小四邊形。新的四邊形需要從畫布上已有的四邊形計算出來。新四邊形不一定是我現有四邊形的縮放版本,但輸入和輸出四邊形的邊必須平行。我上傳了一張圖片來描述問題。從給定的四邊形中找出符合矩形的最小四邊形

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

任何想法我怎麼能去呢?

在此先感謝。

回答

2

好了,讓ABCD是點在定義隨機四邊形:

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

否w讓E(左上),F(右上),G(左下),H(右下)是矩形的點。在你的形象,你必須確定:

  • 並行的由E方程1次通過(我們稱之爲1' )
  • 並行的由F方程2通過(我們稱之爲2 「)
  • 並行至3通過由G等式(讓我們稱之爲3」)
  • H所述並行的方程(4)通過(讓我們稱之爲4' )

然後你可以計算它們的交點,這反過來給你你需要的線。

讓我們確定1'(其他類似):與1並行的所有行都具有與1相同的斜率。

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

然後1' 具有像y = s1 * x + b等式:和該斜率s1由下式給出。因爲我們希望這條線到達點E(xE, yE),我們有b

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

,然後1' 沒有公式:y = s1 * (x - xE) + yE。類似地,對於方程y = s2 * (x - xF) + yF,s2,2'具有由BC的座標確定,對於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'交點)的座標。你需要的四邊形由這4個點組成I,J,KL

+0

這是我在一個月中見過的最令人敬畏的答案。你必須掛在http://mathoverflow.net/ +1 – 2011-04-22 12:56:50

+0

感謝您的好評,jamietre! – Emmanuel 2011-04-22 13:01:27

+0

那是超級快速的伊曼紐爾。非常感謝你的努力。但根據你的描述,我嘗試了隨機圖紙。看看這個鏈接:http://www.4shared.com/photo/7b0CphrR/SmallQuad2.html 我該如何解決?再次感謝Emmanuel。 – 2011-04-22 13:25:06