博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2074Line of Sight(直线相交)
阅读量:5265 次
发布时间:2019-06-14

本文共 2711 字,大约阅读时间需要 9 分钟。

几何细节题。

对于每一个障碍物可以求出它在地产线上的覆盖区间,如下图。

紫色部分即为每个障碍物所覆盖掉的区间,求出所有的,扫描一遍即可。

几个需要注意的地方:直线可能与地产线没有交点,可视区间可能包含地产线的端点,扫描的时候保留当前扫到的最大值。

代码中的数据很经典,供参考。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 using namespace std; 11 #define N 10100 12 #define LL long long 13 #define INF 0xfffffff 14 #define zero(x) (((x)>0?(x):-(x))
>2; 18 struct point 19 { 20 double x,y; 21 point(double x=0,double y=0):x(x),y(y) {} 22 } p[N]; 23 struct line 24 { 25 point u,v; 26 } li[N]; 27 typedef point pointt; 28 pointt operator -(point a,point b) 29 { 30 return point(a.x-b.x,a.y-b.y); 31 } 32 int dcmp(double x) 33 { 34 if(fabs(x)
=0||dcmp(li[i].u.y-li[2].u.y)<=0) continue; 81 point pp; 82 intersection1(li[1].u,li[i].v,li[2].u,li[2].v,pp); 83 p[++g].y = min(li[2].v.x,max(pp.x,li[2].u.x)); 84 intersection1(li[1].v,li[i].u,li[2].u,li[2].v,pp); 85 p[g].x = max(li[2].u.x,min(li[2].v.x,pp.x)); 86 } 87 sort(p+1,p+g+1,cmp); 88 double maxz,ty ; 89 // cout<
<<" "<
<
ty)103 {104 maxz = max(p[i+1].x-ty,maxz);//printf("%.3f %.3f\n",ty,maxz);105 ty = p[i+1].y;106 }107 108 }109 if(dcmp(maxz)<=0)110 puts("No View");111 else112 printf("%.2f\n",maxz);113 }114 return 0;115 }116 /*117 2 6 6118 0 15 0119 3120 1 2 1121 3 4 1122 12 13 1123 1 5 5124 0 10 0125 1126 0 15 1127 2 6 6128 0 15 0129 3130 1 2 1131 3 4 1132 12 13 1133 2 6 6134 0 15 0135 4136 1 2 1137 3 4 1138 12 13 1139 1 5 2140 2 6 6141 0 15 0142 2143 0 5 3144 6 15 3145 2 6 6146 0 15 0147 2148 6 10 1149 0 2 1150 2 6 6151 0 15 0152 1153 2 6 7154 2 6 6155 0 15 0156 1157 2 6 7158 2 6 6159 0 15 0160 1161 4 4.5 5.5162 2 6 6163 0 15 0164 16165 0 1 3166 1.5 2 3167 2.5 3 3168 3.5 4 3169 4.5 5 3170 5.5 6 3171 6.5 7 3172 7.5 8 3173 8.5 9 3174 9.5 10 3175 10.5 11 3176 11.5 12 3177 12.5 13 3178 13.5 14 3179 14.5 15 3180 15.5 16 3181 2 6 6182 0 15 0183 16184 0 1 .1185 1.5 2 .1186 2.5 3 .1187 3.5 4 .1188 4.5 5 .1189 5.5 6 .1190 6.5 7 .1191 7.5 8 .1192 8.5 9 .1193 9.5 10 .1194 10.5 11 .1195 11.5 12 .1196 12.5 13 .1197 13.5 14 .1198 14.5 15 .1199 15.5 16 .1200 2 6 6201 0 15 0202 14203 0 1 3204 1.5 2 3205 2.5 3 3206 3.5 4 3207 4.5 5 3208 5.5 6 3209 8.5 9 3210 9.5 10 3211 10.5 11 3212 11.5 12 3213 12.5 13 3214 13.5 14 3215 14.5 15 3216 15.5 16 3217 2 6 6218 0 4000000000 0219 2220 1 2 1 221 15 16 3222 2 6 6223 0 15 1224 5225 1 1.5 6226 17 18 1 227 3 5 3228 0 20 10229 0 20 0.5230 231 答案:232 8.80233 No View234 8.80235 6.70236 No View237 4.00238 15.00239 15.00240 No View241 No View242 0.44243 1.00244 3999999970.00245 8.00246 */
View Code

 

转载于:https://www.cnblogs.com/shangyu/p/3885885.html

你可能感兴趣的文章
T-SQL问题解决集锦——数据加解密
查看>>
JAVA
查看>>
php 对象调用方法
查看>>
【框架】用excel管理测试用例需要的参数数据(二)
查看>>
Ossimplanet编译笔记(VS2008)(转载)
查看>>
Converting a fisheye image into a panoramic, spherical or perspective projection [转]
查看>>
Saltstack远程执行(四)
查看>>
git 本地分支与远程分支
查看>>
vim常用快捷汇总
查看>>
js基础第四天
查看>>
设计模式-代理模式
查看>>
小问题?
查看>>
Maven教程
查看>>
Crontab Build_setting的定期检查
查看>>
HTML5简单入门系列(三)
查看>>
.Net 中显式实现接口
查看>>
设计模式之工厂方法模式
查看>>
妙趣横生算法 6:希尔排序
查看>>
[导入][幻想情侣][2008热播韩剧][全16集+OST][韩语中字]
查看>>
Divide Two Integers
查看>>