洛谷 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.若给他一个一维坐标系,那么他的磁力一定要在素数坐标的位置上才能发挥的最大(不管位置坐标的大小, ...
随机推荐
- # 双值Hash
双值Hash 简单介绍 Hash的应用:Hash其实就像一个加密过程,很多加密算法都会用到Hash,像GitHub中生成的token值也是Hash的结果. Hash冲突:简单来说就是不同的数映射到了同 ...
- MySQL 聚合函数与count()函数
一.MySQL中的聚合函数 MySQL 5.7文档的章节:12.20.1 Aggregate (GROUP BY) Function “聚合/组合”函数(group (aggregate) funct ...
- 怎样理解 display:none 和 visibility:hidden
1. display: none会使元素节点 "消失" , 就像 死亡后灰飞烟灭了. 它是不占位置的. 2. visibility: hidden会使元素节点 "隐藏&q ...
- 【php设计模式】适配器模式
适配器模式(对象适配器.类适配器): 将一个类的接口转换成客户希望的另一个接口.适配器模式让那些接口不兼容的类可以一起工作. 在适配器模式定义中所提及的接口是指广义的接口,它可以表示一个方法或者方法的 ...
- vue cli3.0 build 打包 的 js 文件添加时间戳 解决 js 缓存问题
// vue.config.jsconst Timestamp = new Date().getTime();module.exports = { configureWebpack: { // web ...
- C++ STL 之 multimap案例之员工分组
#include <iostream> #include <vector> #include <map> #include <string> #incl ...
- PHP 获取数组指定值的位置或下标
<?php //定义一个数组 $array = array(0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd'); // ...
- Delphi 方法的声明
- Delphi 类类型
- CDH5.16.1的kafka集群报错: No broker in ISR for partition [getngo_collect_apm_test,0]
1 详细错误 kafka.common.NoReplicaOnlineException: No broker in ISR for partition [getngo_collect_apm_tes ...