我想解決Uva上的Determine the shape問題。從閱讀問題後我可以得到它是一個Ad Hoc幾何問題,我們必須使用幾何定理來確定我們在2D平面上輸入的四個點的形狀。花了好幾個小時後,我仍然想不出有效的算法,可以在給定的時間內有效地解決問題。我嘗試使用距離公式和斜率,但沒有多大幫助。請提出一些好的算法或定理,我可以用它來解決這個問題。從輸入的四點確定形狀的高效算法
-1
A
回答
0
我首先想到的是以下內容:
- 確定每個邊的長度。使用公式
sqrt((a - x)^2 + (b - y)^2)
。 - 確定每個角度。
- 確定哪些形狀:
- 如果所有角90
- 如果所有側相等,返回SQUARE
- 否則,返回RECTANGLE
- 否則,如果角度1 = 3和角度2 = 4等於
- 如果所有面相等,則返回RHOMBUS
- 否則,返回平行四邊形
- 否則,如果角1 + 2 == 180,或角3 + 4 == 180,返回TRAPEZIUM
- 否則,返回普通四邊形
- 如果所有角90
但請考慮遵循here的邏輯;他們已經使用了矢量數學,並簡單地計算是否有一個直角或兩條線是平行的,而不是計算所有角度。
- 準備一些函數來計算兩條線是否平行,以及角是否是直角(使用矢量數學)。
- 對點進行排序,以便它們按正確的旋轉順序排列(實際順序對凹形不明確,但它應該沒有關係,應該仍然返回普通四邊形)。
- 確定每條線的長度。
- 確定形狀,給定長度以及線條是平行還是角度正確。
0
首先,不同的形狀具有以下關係:
Ordinary Quadrilateral --(with one pair of parallel sides)--> Trapezium
Trapezium --(with additional pair of parallel sides)--> Parallelogram
Parallelogram
--(with four equal straight lines)--> Rhombus--(with four 90 degree angles)-->square
|--(with four 90 degree angles)--> Rectangle --(with four equal lines)--> square
鑑於四個點A,B,C,d,採取隨機一個(比方說A),並且我們需要計算統計數據(角以下四點對(不是全部),包括
(1) AB and CD, A1, L1
(2) AC and BD, A2, L2
(3) AB and AC, A3, L3
(4) AB and AD, A4, L4
然後我想招就如何組織分支,使我們可以有最小的計算和代碼路徑和長度)。我的建議如下:
A3 = getAngle(AB, AC)
A4 = getAngle(AB, AD)
if A3 > A4
we know AD is the diagonal line, then use A, B, C to calculate
else
we know AC is the diagonal line, then use A, B, D to calculate
# following suppose we use A, B, C to do the calculation, we could easily do the A, B, D thing if define new variables
L3 = LengthEqual(AB, AC)
A1 = getAngle(AB, AD)
if A3 == 90 && A1 == 0
if L3 == True
Square
else
Rectangle
else
A2 = getAngle(AC, BD)
L2 = LengthEqual(AC, BD)
if A2 == 0 && A1 == 0
if L2 == True
Rhombus
else
Parallelogram
else if A2 == 0 || A1 == 0
Trapezium
else
Ordinary Quadrilateral
在該手段,力求做到相對較少的計算聰明地轉移到我們想要的結果。希望這可以幫助。
相關問題
- 1. 確定BST的高效算法
- 2. 樹狀圖截斷的高效算法
- 3. 高效的矩形擬合算法
- 4. 合併多邊形的高效算法
- 5. 確定DBSCAN算法的輸入值
- 6. C從點陣中確定最大多邊形的算法
- 7. Java - 從用戶獲得特定輸入的高效方法
- 8. 高效定時器算法
- 9. 確定幾何形狀的梯度所需的算法
- 10. 高效四邊形實現的自定義對齊選項
- 11. 使用四捨五入來確定浮點運算
- 12. 算法從座標確定矩形
- 13. 從視頻輸入中確定房間大小的算法
- 14. 黑莓的狀態四路輸入?
- 15. 從陣列創建形狀的算法
- 16. 確定相交四邊形?
- 17. 如何正確指定Keras中LSTM模型的輸入形狀
- 18. 使用螺旋四方形的算法
- 19. 如何正確輸入形狀或input_dim?
- 20. 高效檢測大圖像的形狀
- 21. 正確的方法來分裂四邊形由高度圖製成的地形?
- 22. 生成形狀的算法
- 23. 確定TicTacToe遊戲狀態的算法?
- 24. 計算兩個四邊形交點的方法?
- 25. 高效的多選算法
- 26. 高效的算法設置
- 27. 更高效的compareTo算法?
- 28. F#fibbonaci高效的算法
- 29. 高效的過濾算法
- 30. 方程的高效算法
感謝它有效地完成了工作 – Alpa8