nyoj68三点顺序
生活随笔
收集整理的這篇文章主要介紹了
nyoj68三点顺序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
三點順序
時間限制:1000?ms?給你不共線的三個點A,B,C的坐標,,現在讓你判斷A,B,C是順時針給出的還是逆時針給出的?
圖1:順時針給出 ? ? ? ? ?圖2:逆時針給出?
?? ?
??? ? ? ?<圖1> ? ? ? ? ? ? ? ? ? <圖2>
輸入輸入0 0 0 0 0 0表示輸入結束
測試數據不超過10000組
1
這道題看到別人用算法幾下搞定,但還是想說一下自己的思路:
先算出過A,B兩點的直線方程y=kx+b,再看C在直線上方還是下方,再結合AB的方向就可判斷是逆時針給出的三角形還是順時針
1.Ax < Bx ?AB的方向就是A--->B ?(Ax表示A點橫坐標以此類推)
若C在AB所在延長線上方 ?逆;在下方 ?順?
2.Ax > Bx?AB的方向就是A<---B
與1相反
若C在AB所在延長線上方 ?順;在下方 ?逆?
3.Ax == Bx 則只需比較其縱坐標
Ay > By
C在A或Bx左邊 ?逆; 在右邊 ?順
Ay < By
左順,右逆
Ay == By
丫,我是不是發蠢了, 縱坐標再相等兩個點就重合了,這特么還是三角形么
下面是AC代碼:
#include <stdio.h> int main() {double Ax, Ay, Bx, By, Cx, Cy;double k, b, ty;char fag;while(~scanf("%lf%lf%lf%lf%lf%lf", &Ax, &Ay, &Bx, &By, &Cx, &Cy)) {if(Ax == 0 && Bx == 0 && Cx == 0) break;//全為0時結束程序 k = (Ay-By) / (Ax-Bx);//求過AB的直線y=kx+b的斜率 b = Ay - k*Ax; ty = k*Cx + b; if(Ax < Bx) {//判斷AB間的方向 if(Cy > ty) fag = 0;else fag = 1;//判斷在直線上方還是下方 } else if(Ax > Bx) {if(Cy > ty) fag = 1;else fag = 0;} else {if(Ay < By) {if(Cx > Ax) fag = 1;else fag = 0;} else if(Ay > By) {if(Cx > Ax) fag = 0;else fag = 1;}}printf("%d\n", fag); }return 0; }
總結
以上是生活随笔為你收集整理的nyoj68三点顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DevOps落地成不成,关键不在持续集成
- 下一篇: 阿里专家常昊:新人如何上手项目管理?