博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3130 How I Mathematician Wonder What You Are! 半平面交
阅读量:5880 次
发布时间:2019-06-19

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

和POJ3335一样,只不过这题是逆时针

#include 
#include
#include
#define eps 1e-18using namespace std;const int MAXN = 105;double a, b, c;int n, cnt;struct Point{ double x, y;}point[MAXN], p[MAXN], tp[MAXN];void Get_equation(Point p1, Point p2){ a = p2.y - p1.y; b = p1.x - p2.x; c = p2.x * p1.y - p1.x * p2.y;}Point Intersection(Point p1, Point p2){ double u = fabs(a * p1.x + b * p1.y + c); double v = fabs(a * p2.x + b * p2.y + c); Point t; t.x = (p1.x * v + p2.x * u) / (u + v); t.y = (p1.y * v + p2.y * u) / (u + v); return t;}void Cut(){ int tmp = 0; for(int i=1; i<=cnt; i++) { //顺时针是>-eps和>eps,逆时针是
<-eps if(a * p[i].x + b * p[i].y + c < eps) tp[++tmp] = p[i]; else { if(a * p[i-1].x + b * p[i-1].y + c < -eps) tp[++tmp] = Intersection(p[i-1], p[i]); if(a * p[i+1].x + b * p[i+1].y + c < -eps) tp[++tmp] = Intersection(p[i], p[i+1]); } } for(int i=1; i<=tmp; i++) p[i] = tp[i]; p[0] = p[tmp]; p[tmp+1] = p[1]; cnt = tmp;}void solve(){ for(int i=1; i<=n; i++) p[i] = point[i]; point[n+1] = point[1]; p[0] = p[n]; p[n+1] = p[1]; cnt = n; for(int i=1; i<=n; i++) { Get_equation(point[i], point[i+1]); Cut(); }}int main(){ while(~scanf("%d", &n) && n) { for(int i=1; i<=n; i++) scanf("%lf%lf", &point[i].x, &point[i].y); solve(); puts(cnt > 0? "1" : "0"); } return 0;}

 

转载于:https://www.cnblogs.com/pach/p/7459307.html

你可能感兴趣的文章
kubectl 命令记录
查看>>
H3C交换机中 LI、SI、EI、HI 各型号的区别
查看>>
mmJ:Linux强制更新Ip地址,解决Ip冲突无法访问问题
查看>>
nginx多站设置
查看>>
(二)数据库基础——属性分类
查看>>
hhhh
查看>>
Autumn,仿Spring IOC/AOP集成开发框架
查看>>
高可用负载均衡集群之 HAProxy 部署
查看>>
【转】Jquery 和 CSS3 中的nth-child()
查看>>
灾备与恢复的核心
查看>>
使用lua脚本写自己的私有协议
查看>>
数据库开发 - MyBatis入门
查看>>
Java中String类型的参数传递问题的解析
查看>>
springmvc+ehcache简单例子
查看>>
多级下拉菜单:superfish的应用
查看>>
mysqldumpslow和mysqlsla分析mysql慢查询日志
查看>>
深入浅出Linux设备驱动编程--设备驱动中的并发控制
查看>>
20 个大大节省你时间的 HTML5 开发工具
查看>>
linux shell函数
查看>>
Unit29 Do you have these shoes in a size nine?
查看>>