的我在一個平面ñ點和目標區域P。我試圖找到四個點,它們的面積是四邊形的角落,面積最接近P。下面是Ñ = 5和P上的示例 = 30:區四邊形
- 0,0
- 10,0
- 0,10
- 10,10
- 7,3
答案應該是30.0(最接近P,在此情況下它是平等的)。
你有任何想法如何,我能做到這一點?我知道我可以使用Heron的公式計算每個四邊形的面積,但是我必須嘗試每種組合還是有一些更短的方法?
的我在一個平面ñ點和目標區域P。我試圖找到四個點,它們的面積是四邊形的角落,面積最接近P。下面是Ñ = 5和P上的示例 = 30:區四邊形
答案應該是30.0(最接近P,在此情況下它是平等的)。
你有任何想法如何,我能做到這一點?我知道我可以使用Heron的公式計算每個四邊形的面積,但是我必須嘗試每種組合還是有一些更短的方法?
一般來說,我不認爲提高了對最壞情況下的遍歷所有可能的四邊形的算法。如果面積小於點的面積,則可以使用quadtree排列來排除太遠而無法制作合理的四邊形的點。但即使在那裏,你也必須小心,因爲可能有一個非常薄的具有遠點的四邊形將只有正確的區域,所以你可能不得不將自己歸於四次算法。
但是你可以使用加速:當你有三個點時,找到相關三角形的面積,如果它大於abs(目標面積 - 目前爲止的最佳面積),那麼你不需要嘗試任何值爲第四點。
正如我在你需要Bretschneider's formula的四邊形區域的評論中提到,蒼鷺的是三角形。
嗯,我知道Heron's是三角形xd,我認爲實際上是將它的面積計算爲2個三角形。但無論如何,我做了bruteforce,有4個for循環。它對我嘗試過的測試用例很好,所以我希望它也能通過測試。謝謝:) – user3751721
@ user3751721是的,你可以做到這一點。他們顯然不會交叉? – Charles
可以
乘法比例因子t
添加到它,這樣它的座標樣子
0, 0
10t, 0
0, 10t
10t, 10t
7t, 3t
使用shoelace formula找出區域,說f(t)
。
解決縮放係數t
和你的多邊形的相關座標多項式方程f(t) = 30.0
。
這應該給你你想要的區域(30.0
)的多邊形。
順便說一句,我假設你知道多邊形的形狀,否則,有(無限),能適合你的目標地區的許多解決方案。
Heron的公式適用於三角形,其四邊形的自然延伸稱爲Brahmagupta公式,僅適用於循環四邊形,而不適用於一般四邊形。 – Charles
雖然你可以使用Bretschneider的公式。你需要使用一些trig。 – Charles