洛谷 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.若给他一个一维坐标系,那么他的磁力一定要在素数坐标的位置上才能发挥的最大(不管位置坐标的大小, ...
随机推荐
- Python内存相关
Python内存相关 示例一: v1 = [1, 2, 3] v2 = [1, 2 ,3] v1 = 123 v2 = 123 v1 = "dogfa" v2 = "do ...
- Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire
创建应用对象之间协作关系的行为称为装配(wiring),这也是依赖注入的本质. Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,而开发者需要告诉Spring需要创建哪些 ...
- JS 验证字符串是否能转为json格式
var isJSON=function (str) { if (typeof str == 'string') { try { var obj = JSON.parse(str); if (typeo ...
- Docker 启动SQLServer
1.运行这个命令 docker run -d -e SA_PASSWORD=Docker123 -e SQLSERVER_DATABASE=qgb -e SQLSERVER_USER=sa -e ...
- [JZOJ100026]图--倍增
[JZOJ100026]图--倍增 题目链接 太懒了,自行搜索 分析 裸倍增,不多说 \(fa[i][j]\)表示\(i\)跳\(2^j\)步走到的点 \(f[i][j]\)表示\(i\)跳\(2^j ...
- 一个下午整理的Web前端常见的英文缩写
PV (Page View)页面浏览量 FED(Front-End Development)前端开发 F2E(Front-End Engineer)前端工程师 WWW(World Wide Web)万 ...
- java程序启动极慢的问题处理
在程序部署过程中,遇到一次java程序启动极慢的情况 参考:https://www.iteye.com/blog/windshome-1836885 原部署环境是有外网的,启动java极快 后来极其修 ...
- 第三章、drf框架 - 序列化组件 | Serializer
目录 第三章.drf框架 - 序列化组件 | Serializer 序列化组件 知识点:Serializer(偏底层).ModelSerializer(重点).ListModelSerializer( ...
- vi和vim的使用
本章内容: vi编辑器简介 vim基本使用 vim使用技巧 一.vim简介 vim是一个全屏幕纯文本编辑器,是vi编辑器的增强版. 二.vim的基本使用 1.vim的工作模式 命令模式:是主要使用快键 ...
- 7. Function Decorators and Closures
A decorator is a callable that takes another function as argument (the decorated function). The deco ...