洛谷 P1355 神秘大三角(计算几何基础)
P1355 神秘大三角
题目提供者yeszy
标签 福建省历届夏令营
难度 普及/提高-
题目描述
判断一个点与已知三角形的位置关系。
输入输出格式
输入格式:
前三行:每行一个坐标,表示该三角形的三个顶点
第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系
(详见样例)
所有坐标值均为整数。
输出格式:
若点在三角形内(不含边界),输出1;
若点在三角形外(不含边界),输出2;
若点在三角形边界上(不含顶点),输出3;
若点在三角形顶点上,输出4。
输入输出样例
输入样例#1:
(0,0)
(3,0)
(0,3)
(1,1)
输出样例#1:
1
说明
【数据规模与约定】
对于100%数据,0<=所有点的横、纵坐标<=100
/*
计算几何第一题留念flag.
判断三角形的位置.
用点积和叉积.
所谓点积就是我们平常说得数量积,结果是一个数量.
A·B=|A||B|cos<A,B>=x1*x2+y1*y2.
而叉积的结果是一个向量,是垂直于向量a,b所形成的平面
A×B=|A||B|sin<A,B>=x1*y2-x2*y1.
在顶点上的直接判就可以了.
在边上的话有PA×PB=0&&PA·PB<0充要条件.
在内部我们可以得到互不相同的两个叉积(P点为始点)和的模
等于三角形任意两边叉积的模.
否则就在外边咯.
*/
#include<iostream>
#include<cstdio>
#define MAXN 1001
using namespace std;
int x1,y1,x2,y2,x3,y3,x,y;
bool flag;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
int fabs(int x)
{
return x<0?-x:x;
}
void slove()
{
if(x1==x&&y1==y) flag=true,printf("4");
else if(x2==x&&y2==y) flag=true,printf("4");
else if(x3==x&&y3==y) flag=true,printf("4");
}
void slove2()
{
int a,b;
a=(x1-x)*(y2-y)-(y1-y)*(x2-x);
b=(x1-x)*(x2-x)+(y1-y)*(y2-y);
if(!a&&b<0) flag=true,printf("3");
a=(x1-x)*(y3-y)-(x3-x)*(y1-y);
b=(x1-x)*(x3-x)+(y1-y)*(y3-y);
if(!a&&b<0) flag=true,printf("3");
a=(x3-x)*(y2-y)-(y3-y)*(x2-x);
b=(x3-x)*(x2-x)+(y3-y)*(y2-y);
if(!a&&b<0) flag=true,printf("3");
}
void slove3()
{
int a,b,c,A;
a=fabs((x1-x)*(y2-y)-(y1-y)*(x2-x));//PA*PB.
b=fabs((x1-x)*(y3-y)-(y1-y)*(x3-x));//PA*PC.
c=fabs((x3-x)*(y2-y)-(y3-y)*(x2-x));//PB*PC.
A=fabs((x1-x2)*(y1-y3)-(y1-y2)*(x1-x3));//AB*AC.
if(a+b+c==A) flag=true,printf("1");
}
int main()
{
x1=read(),y1=read(),x2=read(),y2=read(),x3=read(),y3=read();
x=read(),y=read();
slove();
if(!flag) slove2();
if(!flag) slove3();
if(!flag) printf("2");
return 0;
}
洛谷 P1355 神秘大三角(计算几何基础)的更多相关文章
- 洛谷 - P1355 - 神秘大三角 - 简单计算几何
https://www.luogu.org/problemnew/show/P1355 判断一个点和三角形的位置关系,最简单的思路就是用向量. 首先排除掉和三角形顶点重合的情况. 把三角形设计成一个首 ...
- 叉积_判断点与三角形的位置关系 P1355 神秘大三角
题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三个顶点 第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系 (详见样例) 所有 ...
- P1355 神秘大三角
题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三个顶点 第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系 (详见样例) 所有 ...
- 洛谷 P1230 智力大冲浪
洛谷 P1230 智力大冲浪 题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?! ...
- 洛谷P3348 [ZJOI2016]大森林(LCT,虚点,树上差分)
洛谷题目传送门 思路分析 最简单粗暴的想法,肯定是大力LCT,每个树都来一遍link之类的操作啦(T飞就不说了) 考虑如何优化算法.如果没有1操作,肯定每个树都长一样.有了1操作,就来仔细分析一下对不 ...
- 洛谷——P2640 神秘磁石
P2640 神秘磁石 题目背景 在遥远的阿拉德大陆,有一种神秘的磁石,是由魔皇制作出来的, 题目描述 1.若给他一个一维坐标系,那么他的磁力一定要在素数坐标的位置上才能发挥的最大(不管位置坐标的大小, ...
- 洛谷P2867 [USACO06NOV]大广场Big Square
P2867 [USACO06NOV]大广场Big Square 题目描述 Farmer John's cows have entered into a competition with Farmer ...
- 洛谷 P2867 [USACO06NOV]大广场Big Square
P2867 [USACO06NOV]大广场Big Square 题目描述 Farmer John's cows have entered into a competition with Farmer ...
- 洛谷 P2640 神秘磁石
P2640 神秘磁石 题目背景 在遥远的阿拉德大陆,有一种神秘的磁石,是由魔皇制作出来的, 题目描述 1.若给他一个一维坐标系,那么他的磁力一定要在素数坐标的位置上才能发挥的最大(不管位置坐标的大小, ...
随机推荐
- resful规范: 进行数据交换时的代码潜规则
目前主流的三种web服务交互方案: REST (Representational State Transfer) 表征性状态转移 SOAP (Simple Object Access Protocol ...
- 用bisect来管理已排序的序列
bisect 模块包含两个主要函数,bisect 和 insort,两个函数都利用二分查找算法来在有序序列中查找或插入元素. 2.8.1 用bisect来搜索 bisect(haystack, nee ...
- Core dump文件和ECFS
core dump文件 core dump核心转储文件,一些信号的处理方式,会生成一个elf格式的文件,用来分析进程崩溃情况. 总结一下,core dump核心转储文件就是将所有的vma都映射成一个e ...
- tomcat 发布的web项目不在webapps目录下
双击服务器(如果服务器再启动,请停止并删除里面的项目,再clean一下), server location 选择use tomcat installation: deploy path 改为webap ...
- How does a browser know which response belongs to which request?
Today I knows that the server never send a request to a client! It just make response~ So,if the bro ...
- Python实现英文文章加密传送,收到后进行解密
思路:将I Love You这样的字符串中的每一个字符,将他的Unicode码都就进行加或减去一个特定的数, 在传送过程中,如果被截获,获取的也是一段混乱的文章,当收到这段文章后,按相同的方式对Uni ...
- OPENGL 显示BMP图片+旋转
VS2010/Windows 7/ 1. 需包含头文件 stdio.h, glaux.h, glut.h.需要对应的lib,并添加包含路径 2. 窗口显示用glut库的函数 3. bmp图片从本地读取 ...
- 【web安全】浅谈web安全之XSS
XSS定义 XSS, 即为(Cross Site Scripting), 中文名为跨站脚本, 是发生在目标用户的浏览器层面上的,当渲染DOM树的过程成发生了不在预期内执行的JS代码时,就发生了XSS攻 ...
- vue中非父子组件的传值bus的使用
非父子之间的组件传值,可以使用vuex.简单的状态管理,也可以用vue bus vue bus可以实现不同组件间.不同页面间的通信,比如我在A页面出发点击事件,要B页面发生变化,使用方法如下: 全局定 ...
- MySQL无法启动:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
1 详细异常 ct 11 17:31:51 bd02.getngo.com mysqld[20513]: 2019-10-11T09:31:51.187848Z 0 [Note] /usr/sbin/ ...