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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算几何/sgu 124 Broken line

發布時間:2023/12/13 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算几何/sgu 124 Broken line 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意

  給出由n條線段圍成的多邊形(每條邊均平行于坐標軸),以及一個點(x0,y0),問這個點是在形內或是形外或是形上

分析

  對于在線段上,比較容易判斷,直接比較一下坐標的位置即可;

  若不在形上,則在該點處向上引一條射線。因為是向上引的,所以只和與x軸平行的線有交點,記錄交點個數。

? ? ? 注意在記錄交點個數時,如果在一條線段的短點,只記一側的,別記重了。

  這樣,統計相交次數。如果為奇數,則在形內;偶數,形外

?

  注意讀入數據后比較一下大小并交換。

?

?

Accepted Code

1 /* 2 PROBLEM:sgu 124 3 AUTHER:Rinyo 4 MEMO:計算幾何 5 */ 6 #include<cstdio> 7 const int maxn(10030); 8 int x1[maxn],x2[maxn],y1[maxn],y2[maxn]; 9 int main() 10 { 11 freopen("in.txt","r",stdin); 12 int n; 13 scanf("%d",&n); 14 for (int i=1;i<=n;i++) 15 { 16 scanf("%d%d%d%d",&x1[i],&y1[i],&x2[i],&y2[i]); 17 if (x1[i]==x2[i]) 18 { 19 if (y1[i]>y2[i]) 20 {int t=y1[i];y1[i]=y2[i];y2[i]=t;} 21 } 22 if (y1[i]==y2[i]) 23 { 24 if (x1[i]>x2[i]) 25 {int t=x1[i];x1[i]=x2[i];x2[i]=t;} 26 } 27 } 28 int x0,y0; 29 scanf("%d%d",&x0,&y0); 30 for (int i=1;i<=n;i++) 31 { 32 if ((x1[i]==x2[i]) && (x1[i]==x0) && (y1[i]<=y0) && (y2[i]>=y0)) 33 { 34 printf("BORDER"); 35 return 0; 36 } 37 if ((y1[i]==y2[i]) && (y1[i]==y0) && (x1[i]<=x0) && (x2[i]>=x0)) 38 { 39 printf("BORDER"); 40 return 0; 41 } 42 } 43 int t=0; 44 for (int i=1;i<=n;i++) 45 if ((y1[i]==y2[i]) && (y1[i]>y0) && (x1[i]<x0) && (x2[i]>=x0)) t++; 46 if (t & 1==1) printf("INSIDE"); 47 else printf("OUTSIDE"); 48 return 0; 49 }

?

轉載于:https://www.cnblogs.com/Rinyo/archive/2013/03/19/2970180.html

總結

以上是生活随笔為你收集整理的计算几何/sgu 124 Broken line的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。