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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

uva5984(简单计算几何)

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

題意:

給出n個(gè)圖形,三角形、正方形和圓形,問這些圖形覆蓋多少個(gè)整數(shù)點(diǎn)。


思路:

每讀入一個(gè)圖形,就去計(jì)算這個(gè)圖形覆蓋了多少個(gè)點(diǎn),用vis[][]來標(biāo)記哪些點(diǎn)被覆蓋過。


代碼:

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<cstdlib> #include<cmath>using namespace std;#define maxn 500 #define eps 1e-8struct point {float x,y; };bool vis[maxn][maxn]; int ans;int dis(int x1,int y1,int x2,int y2) {return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); }void checkC(int x,int y,int r) {for(int i=x-r;i<=x+r;i++)for(int j=y-r;j<=y+r;j++)if(!vis[i][j]&&dis(i,j,x,y)<=r*r){vis[i][j]=1;ans++;}return ; }void checkS(int x,int y,int l) {for(int i=x;i<=x+l;i++)for(int j=y;j<=y+l;j++)if(!vis[i][j]){vis[i][j]=true;ans++;}return ; }double area(point pt0,point pt1,point pt2) { // double a,b,c,p,s; // a=sqrt((pt0.x-pt1.x)*(pt0.x-pt1.x)+(pt0.y-pt1.y)*(pt0.y-pt1.y)); // b=sqrt((pt0.x-pt2.x)*(pt0.x-pt2.x)+(pt0.y-pt2.y)*(pt0.y-pt2.y)); // a=sqrt((pt1.x-pt2.x)*(pt1.x-pt2.x)+(pt1.y-pt2.y)*(pt1.y-pt2.y)); // p=(a+b+c)/2; // s=sqrt(p*(p-a)*(p-b)*(p-c)); // return s;point t1,t2;t1.x=pt1.x-pt0.x;t1.y=pt1.y-pt0.y;t2.x=pt2.x-pt1.x;t2.y=pt2.y-pt1.y;return fabs((t1.x*t2.y-t1.y*t2.x))/2.0; }void checkT(const point A,const point B,const point C) {int minx=min(min((int)A.x,(int)B.x),(int)C.x);int miny=min(min((int)A.y,(int)B.y),(int)C.y);int maxx=max(max((int)A.x,(int)B.x),(int)C.x);int maxy=max(max((int)A.y,(int)B.y),(int)C.y);for(int i=minx; i<=maxx; i++)for(int j=miny; j<=maxy; j++)if(!vis[i][j]){point D;D.x=i*1.0;D.y=j*1.0;double SABC=area(A,B,C);double SumSquar=area(A,D,B)+area(B,D,C)+area(A,D,C);if(fabs(SABC-SumSquar)<eps){vis[i][j]=true;ans++;}}return ; }int main() {int t;char s[2];scanf("%d",&t);while(t--){int n;scanf("%d",&n);ans=0;memset(vis,false,sizeof(vis));while(n--){scanf("%s",s);if(s[0]=='C'){int x,y,r;scanf("%d%d%d",&x,&y,&r);x+=100;y+=100;checkC(x,y,r);}else if(s[0]=='S'){int x,y,l;scanf("%d%d%d",&x,&y,&l);x+=100;y+=100;checkS(x,y,l);}else if(s[0]=='T'){point A,B,C;scanf("%f%f%f%f%f%f",&A.x,&A.y,&B.x,&B.y,&C.x,&C.y);A.x+=100.0;A.y+=100.0;B.x+=100.0;B.y+=100.0;C.x+=100.0;C.y+=100.0;checkT(A,B,C);}}printf("%d\n",ans);}return 0; }


總結(jié)

以上是生活随笔為你收集整理的uva5984(简单计算几何)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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