如果在座標系中給出100個點,並且必須查找這些頂點是否存在直角三角形。 有沒有一種方法可以檢測這些頂點之間的直角三角形,而不必選擇3個頂點的所有對,然後在它們上應用畢達哥拉斯定理? 有沒有更好的算法呢? 感謝您的幫助。 :)用於檢測直角三角形的C程序
回答
這裏是一個O(n^2日誌n) - 時間算法爲僅兩維。我將描述更高維度中的錯誤。
設S是具有整數座標的點集合。對於S中的每個點o,構造一組非零向量V(o)= {p - o | p在S - {o}}中,並測試V(o)在線性時間中是否包含兩個正交向量,如下所示。方法1:將每個向量(x,y)分類爲(x/gcd(x,y),y/gcd(x,y)),其中| gcd(x,y)|是將x和y分開的最大整數,如果y爲負值,則gcd(x,y)爲負值,如果y爲正值,則爲正值,| x |如果y是零。 (這與將分數置於最低項非常相似)關於兩維的關鍵事實是,對於每個非零向量,存在正好與該向量正交的一個正則向量,具體而言,(-y,x)的經典化(canonization) 。將V(o)中每個向量的標準化插入到一個集合數據結構中,然後,對於V(o)中的每個向量,在該數據結構中查找它的規範正交配偶。我假設gcd和/或set操作花費時間O(log n)。方法2:如下定義一個矢量比較器。鑑於載體(a, b), (c, d)
,寫(a, b) < (c, d)
當且僅當
s1 s2 (a d - b c) < 0,
其中
s1 = -1 if b < 0 or (b == 0 and a < 0)
1 otherwise
s2 = -1 if d < 0 or (d == 0 and c < 0)
1 otherwise.
排序使用此比較的向量。 (這與比較部分a/b
與c/d
非常相似。)對於V(o)中的每個向量(x,y),二進制搜索其正交配偶(-y,x)。
在三維空間中,沿着z軸與單位矢量正交的矢量集是整個x-y平面,並且經典化的等價不能將該平面中的所有矢量映射到一個正交配對。
非常感謝你看到它先生。但是,你能解釋一下經典化的東西嗎?像什麼使用經典化? (除以gcd(x,y))?此外,我有'n'點,然後形成向量選擇所有其他點將是O(n^2)是嗎?然後檢查爲正交性形成的所有其他矢量將是O(n)(線性查看所有矢量?)因此,它將是O(n^2),否?它怎麼可能是'O(n^2logn)'?請解釋..謝謝.. :) – user007 2014-10-07 12:01:23
@ user007這就像把分數至少放在一邊。如果我們假設gcd是恆定時間並且我們可以訪問散列集,那麼是的,運行時間將是O(n^2)。 – 2014-10-07 13:11:10
更簡單:對於每個點,按角度排序其他點,然後查找是否有兩個在O(n)中正交。總體而言,O(n^2.log(n))與您的解決方案相同。 – 2014-10-07 15:21:36
- 1. 點三角形碰撞檢測的3D
- 2. 在三角形中找到直角
- 3. 如何反轉直角三角形(JAVA)
- 4. HSV三角形C#
- 5. 在三角形的三角形中繪製三角形
- 6. 該符號的直角三角形,邊數等於該數字
- 7. C中的Pascal三角形
- 8. 檢查點集三角形細分是一個三角形
- 9. 如何檢索三角形
- 10. Obj-C中三角形碰撞檢測的幫助
- 11. 從三角形的序列
- 12. 爪哇角度在非直角三角形計算點
- 13. Pygame三角碰撞檢測
- 14. Sierpinski三角形調試--- C
- 15. 直線與三角形邊的交點
- 16. 畫布三角形,五角大樓,與彼此的矩形碰撞檢測?
- 17. 用循環畫出一個直角三角形
- 18. 使用Python創建一個直角三角形
- 19. 觸發三角形角度
- 20. 如何獲得圓形和三角形的碰撞檢測
- 21. 非三角形輸入輸出角度非右三角形
- 22. 查找給定區域的直角三角形的邊界
- 23. opengl中的三角形多邊形三角形es
- 24. 確定「等腰直角三角形」的頂點
- 25. 將陰影應用於三角形svg
- 26. 從圖像中檢測三角形,橢圓和矩形
- 27. 關於在三角形中搜索點的程序
- 28. Visual Basic Pythag問題 - 計算給定長度的直角三角形的角度
- 29. C++中的Pascal三角形遞歸程序優化
- 30. 帕斯卡的三角形程序間距C++
您可以找到所有點對(p1 - p2)的矢量,然後檢查其中2個矢量(帶有一個公共端點)的點積爲零。 – Sinstein 2014-10-06 19:34:32
但是,如果我有100分,然後採取2點的每個可能的子集不會是一個更耗時的任務? – user007 2014-10-06 19:37:44
100分並不是那麼多。只要實現樸素的算法,反正不會花費很長時間。 – 2014-10-06 19:49:29