c語言怎麼判斷三點共線?祖國揚帆2021-10-25 08:53:32

題目:已知平面上的三點P1(x1,y1),P2(x2,y2),P3(x3,y3), 判斷它們是否共線。

方法一:判斷向量(p1——>p2)和向量(p1——>p3)的斜率是否相等。即 (y2-y1)/(x2-x1) == (y3-y1)/(x3-x1)。 這個除式判斷可以改寫成乘式判斷:(y3−y1)(x2−x1)−(y2−y1)(x3−x1)=0 (改寫的原因是除法有分母為0或精度等問題,總之乘法更方便!)

注意,如果座標本身是浮點型,儘量不要用“==”進行比較,因為在計算機中小數會有一定的誤差,這時應該取一定的誤差,例如

|(y3−y1)(x2−x1)−(y2−y1)(x3−x1)|<=1e−6 。

方法二:用行列式求三角形面積,再判斷是否為0。

S=(1/2)*(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2)

方法三:同樣是面積法,用海倫公式求三角形面積。 海倫公式:S=sqrt(p*(p-a)*(p-b)*(p-c))。 其中a,b,c為三角形邊長,p=C/2是三角形的半周長。但這種方法顯然是避簡就繁,寫在這裡只是為了複習一下中學學過的海倫公式~