日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nyoj68三点顺序

發(fā)布時(shí)間:2025/3/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nyoj68三点顺序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

三點(diǎn)順序

時(shí)間限制:1000?ms?

給你不共線的三個(gè)點(diǎn)A,B,C的坐標(biāo),,現(xiàn)在讓你判斷A,B,C是順時(shí)針給出的還是逆時(shí)針給出的?

圖1:順時(shí)針給出 ? ? ? ? ?圖2:逆時(shí)針給出?

?? ?

?

?? ? ? ?<圖1> ? ? ? ? ? ? ? ? ? <圖2>

輸入
每行是一組測(cè)試數(shù)據(jù),有6個(gè)整數(shù)x1,y1,x2,y2,x3,y3分別表示A,B,C三個(gè)點(diǎn)的橫縱坐標(biāo)。(坐標(biāo)值都在0到10000之間)
輸入0 0 0 0 0 0表示輸入結(jié)束
測(cè)試數(shù)據(jù)不超過10000組
輸出
如果這三個(gè)點(diǎn)是順時(shí)針給出的,請(qǐng)輸出1,逆時(shí)針給出則輸出0
樣例輸入
0 0 1 1 1 3 0 1 1 0 0 0 0 0 0 0 0 0
樣例輸出
0

1


這道題看到別人用算法幾下搞定,但還是想說一下自己的思路:


先算出過A,B兩點(diǎn)的直線方程y=kx+b,再看C在直線上方還是下方,再結(jié)合AB的方向就可判斷是逆時(shí)針給出的三角形還是順時(shí)針


1.Ax < Bx ?AB的方向就是A--->B ?(Ax表示A點(diǎn)橫坐標(biāo)以此類推)

若C在AB所在延長線上方 ?逆;在下方 ?順?

2.Ax > Bx?AB的方向就是A<---B
與1相反

若C在AB所在延長線上方 ?順;下方 ?逆?

3.Ax == Bx 則只需比較其縱坐標(biāo)

Ay > By
C在A或Bx左邊 ?逆; 在右邊 ?順

Ay < By
左順,右逆

Ay == By
丫,我是不是發(fā)蠢了, 縱坐標(biāo)再相等兩個(gè)點(diǎn)就重合了,這特么還是三角形么


下面是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時(shí)結(jié)束程序 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; }

總結(jié)

以上是生活随笔為你收集整理的nyoj68三点顺序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。