Re: [問題] 請問三點共線

看板Prob_Solve作者 (小安)時間13年前 (2011/04/17 19:04), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/4 (看更多)
※ 引述《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 : } : 請問在網路上我看到這種做法,可以判斷三點共線。 : 但是我不太明白為什麼可以這樣做? : 我個人猜測應該是跟外積有關係 : 但是又式子又推不出來 冏 是外積沒錯, 先算出兩向量 ab = <b.x-a.x, b.y-a.y> ac = <c.x-a.x, c.y-a.y> 此向量的外積: (b.x-a.x)*(c.y-a.y) - (c.x-a.x)*(b.y-a.y) = (b.x*c.y - b.x*a.y - a.x*c.y + a.x*a.y) - (c.x*b.y - c.x*b.y - b.y*a.x + a.x*a.y) 整理一下就跟上面的程式一樣了, 不過我完全不認為寫成那樣有任何好處就是了, 直接判斷 cross(b.x-a.x, b.y-a.y, c.x-a.x, c.y-a.y)==0 比較容易理解。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.78.231
文章代碼(AID): #1DgibRIS (Prob_Solve)
文章代碼(AID): #1DgibRIS (Prob_Solve)