我如何測試多邊形是凸或不只是通過知道多邊形 與它們在C++中的座標的點?多邊形C++的凸性?
0
A
回答
2
多邊形的每一面,計算線方程(Ax+By+C=0
),檢查(放x
和y
入式,並得到其蹤影),所有的點都從它的一邊。
編輯: 如果行程凸多邊形,你會一直旋轉到一個方向(左或右)上的每一個點。 使用交叉產品,您可以簡單地推斷出,您將在下一個回合旋轉的哪一側(正面或負面)。如果三個連續點的所有交叉積都有相同的符號,那麼你的多邊形是凸的。
1
禮物包裝算法是計算給定點集合的凸殼的算法。從wiki
僞代碼:
jarvis(S)
pointOnHull = leftmost point in S
i = 0
repeat
P[i] = pointOnHull
endpoint = S[0] // initial endpoint for a candidate edge on the hull
for j from 1 to |S|-1
if (endpoint == pointOnHull) or
(S[j] is on left of line from P[i] to endpoint)
endpoint = S[j] // found greater left turn, update endpoint
i = i+1
pointOnHull = endpoint
until endpoint == P[0] // wrapped around to first hull point
如果您的點匹配檢測上述算法的點則多邊形是凸的。
1
使用任何常用算法查找凸包。多邊形是凸的,當且僅當它的所有頂點屬於它的凸包。
這是O(n log n),但不依賴於圍繞多邊形邊緣以正確順序給出點的假設。如果假設是真的,那麼仇恨引擎的答案是最優的(即線性時間)。
相關問題
- 1. 凸3D多邊形對象
- 2. Python:最小凸多邊形?
- 3. 凸多邊形,圖形算法
- 4. 從矩形生成凸多邊形
- 5. 非重疊的非凸多邊形
- 6. 來自區域的凸多邊形
- 7. 兩個凸多邊形的交點
- 8. 結合最接近的凸多邊形
- 9. Hausdorff凸多邊形之間的距離
- 10. Cuda中的凸多邊形算法?
- 11. OpenGL中的輪廓非凸多邊形
- 12. 將凹多邊形分解爲凸多邊形
- 13. 在一些小凸多邊形中細分一般多邊形
- 14. 非凸多邊形 - 使用凸包算法的預處理
- 15. 展開填充凸多邊形
- 16. 檢查是否多邊形是凸
- 17. 從頂點獲取凸多邊形
- 18. 如何生成隨機凸多邊形?
- 19. 給定任意凸二維多邊形計算慣性矩
- 20. 爲什麼在非凸多邊形中找到比凸多邊形更硬的點?
- 21. 生成連接的凸多邊形的圖形
- 22. 的Java2D:填一個凸起的圓形多邊形(QuadCurves)
- 23. 將凸多邊形擬合到給定的矩形中
- 24. 形成一個凸多邊形的算法
- 25. 檢查點是否位於(或靠近)凸多邊形邊緣
- 26. 聯合許多凸多邊形的快速算法或庫
- 27. 如何讓三角形網格成凸多邊形?
- 28. 在凹/凸多邊形內部查找有界矩形
- 29. 如何在Box2d中設置多個凸多邊形?
- 30. 多邊形三角形c#
當然,您不希望我們爲您提供此類問題的完整源代碼。你有什麼嘗試?你堅持使用算法嗎?你不知道如何用C++來制定算法嗎? – Oswald 2013-03-03 21:04:07
您可以逐個查看點,抓住當前點的兩個相鄰點,然後使用餘弦定理找出這三點所包圍的角度。如果發現角度大於90度,那麼多邊形是凹的,如果沒有大於90度的角度,那麼它是凸的。 – 2013-03-03 21:04:16
我試過這種方式,但我不知道如何確定它是內部角度還是外部因爲我需要內部的一個 – user2116010 2013-03-03 21:08:58