看板 Prob_Solve 關於我們 聯絡資訊
※ 引述《chchwy (mat)》之銘言: : Point a,b,c; : int pos = a.x*b.y + b.x*c.y + c.x*a.y; : int neg = a.x*c.y + b.x*a.y + c.x*b.y; : if(pos==neg) { : // They're on the same line : } : 請問,我在網路上看到這種做法,可以判斷三點共線。 : 但是我不太明白為什麼可以這樣做? : 我個人猜測應該是跟外積有關係 : 但是式子又推不出來 冏 我覺得他用的是簡單多邊形的有號面積公式: 1 | p1.x p2.x pn.x p1.x | --- | ... | 2 | p1.y p2.y pn.y p1.y | pos - neg 正好是這個式子的兩倍 (就是那個很行列式的那一塊) 那麼三點共線 <==> 面積為 0 <==> pos == neg 應該是這麼想來的.... (這樣也比較能理解為什麼這兩個暫時變數要取名叫 pos 和 neg 因為根本就是這個式子的正項和負項) 不然如果真的是用前面的計算的話 正如 tkcn 說的不如直接寫 cross(...) -- "LPH" is for "Let Program Heal us".... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.131 ※ 編輯: LPH66 來自: 140.112.30.131 (04/18 03:43)
tkcn:有道理! 04/18 09:43
chchwy:原來如此 感謝您的解說 04/18 18:54