洛谷 - P1355 - 神秘大三角 - 简单计算几何
https://www.luogu.org/problemnew/show/P1355
判断一个点和三角形的位置关系,最简单的思路就是用向量。
首先排除掉和三角形顶点重合的情况。
把三角形设计成一个首尾相接的三个向量,从三个向量的起点连线到P点构成新向量,叉乘判断方向。二维向量叉乘(x1,y1)×(x2,y2)=(x1y2-x2y1),方向是右手螺旋。那么判断正负号就知道他们在向量的哪一侧了。
在三角形中的应该在三个向量的同侧。而不在三角形中的会有一个方向与另外两个不同。在三角形上的显然就是存在一个0。
上面的解法有一个bug,其实叉乘为0只是代表在直线上,判断在线段上还要加一次点乘。
顺便练习一波scanf,注意scanf读入double必须是%lf,要求scanf略去字符可以参考下方写法,注意换行符用空格略去。
#include<bits/stdc++.h>
using namespace std;
#define ll long long struct Vector{
double x,y; Vector(double xx=0.0,double yy=0.0){x=xx,y=yy;} Vector operator-(Vector v2){
return Vector(x-v2.x,y-v2.y);
} bool operator==(Vector v2){
if(fabs(x-v2.x)<1e-&&fabs(y-v2.y)<1e-)
return true;
return false;
} double dot(Vector v2){
return x*v2.x+y*v2.y;
} double cross(Vector v2){
return x*v2.y-y*v2.x;
}
}; typedef Vector Point; int main(){
Point A,B,C,P;
scanf("(%lf,%lf)",&A.x,&A.y);
scanf(" (%lf,%lf)",&B.x,&B.y);
scanf(" (%lf,%lf)",&C.x,&C.y);
scanf(" (%lf,%lf)",&P.x,&P.y); if(A==P||B==P||C==P){
printf("4\n");
return ;
} Vector a=C-B,b=A-C,c=B-A;
Vector pa=P-B,pb=P-C,pc=P-A; double cross1=a.cross(pa);
double cross2=b.cross(pb);
double cross3=c.cross(pc); if(fabs(cross1)<1e-){
//bug在这里,叉乘为0是在直线上而非线段上
//前面判断了在端点上的情况,所以现在只需要判断方向
Vector t1=pa,t2=pb;
if(t1.dot(t2)<)
printf("3\n");
else
printf("2\n");
return ;
} if(fabs(cross2)<1e-){
//bug在这里,叉乘为0是在直线上而非线段上
//前面判断了在端点上的情况,所以现在只需要判断方向
Vector t1=pb,t2=pc;
if(t1.dot(t2)<)
printf("3\n");
else
printf("2\n");
return ;
} if(fabs(cross3)<1e-){
//bug在这里,叉乘为0是在直线上而非线段上
//前面判断了在端点上的情况,所以现在只需要判断方向
Vector t1=pc,t2=pa;
if(t1.dot(t2)<)
printf("3\n");
else
printf("2\n");
return ;
} int flag1=cross1*cross2>;
int flag2=cross2*cross3>;
int flag3=cross3*cross1>; if(flag1&&flag2&&flag3){
printf("1\n");
return ;
} printf("2\n"); }
洛谷 - P1355 - 神秘大三角 - 简单计算几何的更多相关文章
- 洛谷 P1355 神秘大三角(计算几何基础)
P1355 神秘大三角 题目提供者yeszy 标签 福建省历届夏令营 难度 普及/提高- 题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三 ...
- 叉积_判断点与三角形的位置关系 P1355 神秘大三角
题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三个顶点 第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系 (详见样例) 所有 ...
- P1355 神秘大三角
题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三个顶点 第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系 (详见样例) 所有 ...
- 洛谷 P1230 智力大冲浪
洛谷 P1230 智力大冲浪 题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?! ...
- 洛谷P3348 [ZJOI2016]大森林(LCT,虚点,树上差分)
洛谷题目传送门 思路分析 最简单粗暴的想法,肯定是大力LCT,每个树都来一遍link之类的操作啦(T飞就不说了) 考虑如何优化算法.如果没有1操作,肯定每个树都长一样.有了1操作,就来仔细分析一下对不 ...
- 洛谷 P4219 [BJOI2014]大融合 解题报告
P4219 [BJOI2014]大融合 题目描述 小强要在\(N\)个孤立的星球上建立起一套通信系统.这套通信系统就是连接\(N\)个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一条边的 ...
- 洛谷P1230 智力大冲浪
题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...
- 【洛谷5286】[HNOI2019] 鱼(计算几何)
点此看题面 大致题意: 给你\(n\)个点,让你求鱼形图的数量. 核心思路 首先,考虑到\(n\)这么小,我们可以枚举线段\(AD\),再去找符合条件的\(BC,EF\). 然后,不难发现\(BC\) ...
- 洛谷——P2640 神秘磁石
P2640 神秘磁石 题目背景 在遥远的阿拉德大陆,有一种神秘的磁石,是由魔皇制作出来的, 题目描述 1.若给他一个一维坐标系,那么他的磁力一定要在素数坐标的位置上才能发挥的最大(不管位置坐标的大小, ...
随机推荐
- BUPT复试专题—最近公共祖先(2014软院)
题目描述 给出一棵有N个节点的有根树TREE(根的编号为1),对于每组查询,请输出树上节点u和v的最近公共祖先. 最近公共祖先:对于有向树TREE的两个结点u,v.最近公共祖先LCA(TREE u,v ...
- weex 小结
1. import 文件时,必须引入全称,不能省略 .vue import mEcharts from '../components/Echarts.vue' 2.weex 的 cli 中没有 配置 ...
- 第二种BitBand操作的方式 - 让IDE来帮忙算地址
要使用Bitband来訪问外设,一定要得出相应的映射地址.人工计算肯定是不靠谱的,并且也没人想这么干.因此能够通过Excel,拉个列表来计算.想想,这也是一个不错的招数.可是后来想想,还是嫌麻烦,毕竟 ...
- HDU1114 Piggy-Bank 【全然背包】
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- openwrt: sysupgrade
sysupgrade 用法: sysupgrade [...] sysupgrade [-q] [-i] 升级选项: -d 重启前等待 delay 秒 -f 从 .tar.gz (文件或链接) 中恢复 ...
- 写码时应该缩进使用 tab 还是空格?
对于程序员来说,其实Tab和空格远远不只是“立场”问题那么简单. 在不同的编辑器里tab的长度可能不一致,所以在一个编辑器里用tab设置缩进后,在其它编辑器里看可能缩进就乱了.空格不会出现这个问题,因 ...
- POJ 1703 Find them, Catch them(种类并查集)
题目链接 这种类型的题目以前见过,今天第一次写,具体过程,还要慢慢理解. #include <cstring> #include <cstdio> #include <s ...
- python day-3 基本数据类型
1. 编码 1. 最早的计算机编码是ASCII. 美国人创建的. 包含了英文字母(大写字母, 小写字母). 数字, 标点等特殊字符!@#$% 128个码位 2**7 在此基础上加了一位 2**8 8位 ...
- sanic官方文档解析之Custom Protocols(自定义协议)和Socket(网络套接字)
1,Custom Protocol:自定义协议 温馨提示:自定义协议是一个高级用法,大多数的读者不需要用到此功能 通过特殊的自定义协议,你可以改变sanic的协议,自定义协议需要继承子类asyncio ...
- 20170221 SE03 打包请求
请求处理:SE03 只会有其中两三个功能,还需要学习. 请求打包,是传输请求时候常用的一种方法. 步骤如下: 注意点:1.打包请求一定仔细检查,不要遗漏 如果请求不多,分开传是更好 ...