博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Luogu1355]神秘大三角
阅读量:6086 次
发布时间:2019-06-20

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

题目大意:

  给你一个三角形三个顶点坐标和另外一个点,问点和三角形的关系。

思路:

  在顶点上时和三个顶点分别比较一下坐标即可。
  在边上时算一下斜率式,判断一下是否在直线上,并且通过坐标中某个维度的值判断一下是否在线段上。
  这时注意判断一下这条直线是不是竖直的,不然会被零除。
  判断在三角形内外可以用面积法——就是从p往另外每两个点都连一下,判断一下面积加起来是不是等于三角形abc的面积。

1 #include
2 #include
3 #include
4 #include
5 inline int getint() { 6 register char ch; 7 while(!isdigit(ch=getchar())); 8 register int x=ch^'0'; 9 while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');10 return x;11 }12 struct Point {13 int x,y;14 bool operator == (const Point &another) const {15 return x==another.x&&y==another.y;16 }17 };18 inline double sqr(const int &x) {19 return x*x;20 }21 inline double dis(const Point &a,const Point &b) {22 return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));23 }24 inline double sum(const Point &x,const Point &y,const Point &z) {25 const double a=dis(y,z),b=dis(x,z),c=dis(x,y),p=(a+b+c)/2;26 return sqrt(p*(p-a)*(p-b)*(p-c));27 }28 int main() {29 Point a=(Point){getint(),getint()},b=(Point){getint(),getint()},c=(Point){getint(),getint()},p=(Point){getint(),getint()};30 if(p==a||p==b||p==c) {31 puts("4");32 return 0;33 }34 if(a.x>b.x) std::swap(a,b);35 if(p.x>=a.x&&p.x<=b.x) {36 if(a.x==b.x) {37 if(a.y>b.y) std::swap(a,b);38 if(a.y<=p.y&&p.y<=b.y) {39 puts("3");40 return 0;41 }42 } else if((b.y-a.y)/(b.x-a.x)*(p.x-a.x)+a.y==p.y) {43 puts("3");44 return 0;45 }46 }47 if(a.x>c.x) std::swap(a,c);48 if(p.x>=a.x&&p.x<=c.x) {49 if(a.x==c.x) {50 if(a.y>c.y) std::swap(a,c);51 if(a.y<=p.y&&p.y<=c.y) {52 puts("3");53 return 0;54 }55 } else if((c.y-a.y)/(c.x-a.x)*(p.x-a.x)+a.y==p.y) {56 puts("3");57 return 0;58 }59 }60 if(b.x>c.x) std::swap(b,c);61 if(p.x>=b.x&&p.x<=c.x) {62 if(b.x==c.x) {63 if(b.y>c.y) std::swap(b,c);64 if(b.y<=p.y&&p.y<=c.y) {65 puts("3");66 return 0;67 }68 } else if((c.y-b.y)/(c.x-b.x)*(p.x-b.x)+b.y==p.y) {69 puts("3");70 return 0;71 }72 }73 if(abs(sum(a,b,p)+sum(a,c,p)+sum(b,c,p)-sum(a,b,c))<1e-5) {74 puts("1");75 } else {76 puts("2");77 }78 return 0;79 }

 

转载于:https://www.cnblogs.com/skylee03/p/7761299.html

你可能感兴趣的文章
我的友情链接
查看>>
我的友情链接
查看>>
OCM考试经历:Section 1 数据库和网络配置
查看>>
获取字符串中 中文与英文 个数
查看>>
我的友情链接
查看>>
NoSQL to MySQL with Memcached
查看>>
Word天,.Net 大集合,学学学~~~
查看>>
Html5 Canvas (2)
查看>>
支付宝App 支付(4年前分享)
查看>>
项目实践中Linux集群的总结和思考
查看>>
一行代码判断 IE 浏览器版本
查看>>
fopen和open函数的区别
查看>>
运维之我的docker-docker的网络管理
查看>>
xshell使用key登录linux
查看>>
vs2012 key
查看>>
java 时出现 could not open jvm.cfg 的解决办法之一
查看>>
md5加密与解密
查看>>
使用tar做备份
查看>>
从表到里学习JVM实现
查看>>
随机码的生成,python 2.7/eclipse 3.7+PyDev 2.4.0
查看>>