我有一個閉合的非自相交多邊形。它的頂點保存在兩個向量X和Y中。最後,X和Y的值被綁定在0和22之間。什麼是計算圖像與多邊形重疊的簡單方法?
我想構造一個大小爲22x22的矩陣,並設置每個bin的值等於如果部分多邊形與該部分重疊,則爲true,否則爲false。
我最初的想法是生成一個由[a, b] = meshgrid(1:22)
定義的點的網格,然後使用inpolygon
來確定網格中的哪些點在多邊形中。
[a b] = meshgrid(1:22);
inPoly1 = inpolygon(a,b,X,Y);
然而,這僅返回true,如果如果倉的中心包含在多邊形,也就是說,它下面的圖片返回紅色形狀。然而,什麼需要更多地沿着綠色形狀的線條(儘管它仍然是一個不完整的解決方案)。
爲了獲得綠色斑點,我對inpolygon
執行了四次調用。對於每次比較,我將NE,NW,SE或SW的網格點移動1/2。這相當於測試垃圾箱的角落是否在多邊形中。
inPoly2 = inpolygon(a-.5,b-.5,X,Y) | inpolygon(a+.5,b-.5,X,Y) | inpolygon(a-.5,b+5,X,Y) | inpolygon(a+.5,b+.5,X,Y);
雖然這並提供給我的情況下,失敗的部分解決方案時,一個頂點是包含一個箱子,但沒有垃圾桶的角落都是。
有沒有更直接的方法來攻擊這個問題,最好是一個能產生更多可讀代碼的解決方案?
這個陰謀被繪製:
imagesc(inPoly1 + inPoly2); hold on;
line(a, b, 'w.');
line(X, Y, 'y);
必須離開計算機,但認爲我會提供一個可能有所幫助的通用解決方案。首先將網格網格縮放至22的倍數,以便以等於或大於頂點使用的密度來定義面積 - 這將消除拐角問題。然後再回到22乘22的網格,您可以簡單地按照您放大的相同因子進行分割,將頂部/左側的點鋪在地面上,並將底部/右側的點鋪在天花板上。希望有幫助 – Salain