2010-08-11 29 views
1

在Illustrator中,您可以拖動一個矩形並選擇其中的所有對象。它超越了邊界框測試,因爲它確保了它觸及多邊形的實際部分。那麼它如何有效地做到這一點?如果要檢查是否多邊形P的任何部分是一個矩形R內(AC或C++實現將是優選的)矢量繪圖應用程序如何做到這一點?

由於

+1

它是否選擇完全在矩形內的所有對象?如果是這樣,那麼你可以快速修剪二維「質心」或任何你認爲是中心的東西,我想。雖然我不完全明白這個問題。看起來像一個邊界框仍然可以提供幫助。此外,有多少物體應該足夠快地工作?它可以限制在100,1000,10000等還是沒有限制? – 2010-08-11 02:31:35

+2

請您詳細說明一下,輸入和輸出是什麼?另外,'ensres'是什麼意思? – 2010-08-11 02:32:16

+0

輸入=矩形和封閉曲線列表。輸出=與矩形相交的曲線。 Ensres =確保。 – Potatoswatter 2010-08-11 02:34:45

回答

3

,則可以做到這一點:

  • 如果任何頂點的P在R內,則返回TRUE;
  • 如果R的任何頂點都在P之內,則返回TRUE;
  • 如果P(相鄰頂點之間的線)的任何邊與R的邊相交,則返回TRUE。
  • 否則,返回FALSE。
+0

這看起來像一個函數?謝謝 – jmasterx 2010-08-11 02:46:18

+1

@Jex:那麼,你將需要的基元是一個點包圍盒測試和一個線段相交測試(第一個是簡單的,第二個很容易搜索)。測試一個點是否位於多邊形內是最難的部分 - 一種方法是測試從多邊形的點到邊界框的一條直線與多邊形的邊緣交叉偶數次還是奇數次。 – caf 2010-08-11 02:53:15

+0

我在聚一個點,並指向矩形一,我想所有剩下的就是找到一個交點。謝謝 – jmasterx 2010-08-11 02:59:42

0

您也可以只是構造矩形與對象的交集(像Illustrator這樣的程序已經有很多其他用途的函數)並檢查它是否爲非空。更高效的算法可用(請參閱caf的答案),但我的優點是不需要額外的代碼。

相關問題