题目描述

判断一个点与已知三角形的位置关系。

输入输出格式

输入格式:

前三行:每行一个坐标,表示该三角形的三个顶点

第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系

(详见样例)

所有坐标值均为整数。

输出格式:

若点在三角形内(不含边界),输出1;

若点在三角形外(不含边界),输出2;

若点在三角形边界上(不含顶点),输出3;

若点在三角形顶点上,输出4。

输入输出样例

输入样例#1:

(0,0)
(3,0)
(0,3)
(1,1)
输出样例#1:

1

说明

【数据规模与约定】

对于100%数据,0<=所有点的横、纵坐标<=100

 
本题数据较弱,怎么搞都可以A。就当练练思路吧。
//自己脑洞的AC代码
#include<cstdio>
#include<cmath>
using namespace std;
int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
const double Pi=acos(-);
struct node{
int x,y;
bool operator ==(const node &a){
return x==a.x&&y==a.y;
}
}A,B,C,D;
void init(){
A.x=read();A.y=read();
B.x=read();B.y=read();
C.x=read();C.y=read();
D.x=read();D.y=read();
}
double slop(node a,node b){
if(a.x==b.x) return 1e9;
return (double)(a.y-b.y)/(double)(a.x-b.x);
}
bool deal(node a,node b){//精度要求较高
node t1,t2;
t1.x=a.x-D.x;t1.y=a.y-D.y;
t2.x=b.x-D.x;t2.y=b.y-D.y;
double xiang=(double)(t1.x*t2.x+t1.y*t2.y);
double mo=sqrt((t1.x*t1.x+t1.y*t1.y)*(t2.x*t2.x+t2.y*t2.y));
double cita=xiang/mo;
if(acos(cita)==Pi) return ;
else return ;
}
void work(){
if(D==A||D==B||D==C){puts("");return ;}
//点积求角 180则共线
if(deal(A,B)){puts("");return ;}
if(deal(A,C)){puts("");return ;}
if(deal(B,C)){puts("");return ;}
//判断点是否在三角形中
//http://files.cnblogs.com/files/shenben/%E5%88%A4%E6%96%AD%E7%82%B9%E6%98%AF%E5%90%A6%E5%9C%A8%E4%B8%89%E8%A7%92%E5%BD%A2%E4%B8%AD.sh
if(slop(A,B)!=slop(A,C)&&slop(A,D)!=slop(B,C)
&&(slop(A,D)-slop(A,B))*(A.x-B.x)*(slop(A,D)-slop(A,C))*(A.x-C.x)<=
&&(slop(A,D)-slop(B,C))*(A.x-D.x)*(slop(B,D)-slop(B,C))*(B.x-D.x)<){
puts("");
}
else puts("");
}
int main(){
init();
work();
return ;
}
//题解更好思路的AC代码
#include<cstdio>
#include<cstdlib>
#include<cmath>
using namespace std;
int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
struct node{
int x,y;
bool operator ==(const node &a){
return x==a.x&&y==a.y;
}
}A,B,C,D;
void init(){
A.x=read();A.y=read();
B.x=read();B.y=read();
C.x=read();C.y=read();
D.x=read();D.y=read();
}
int calc(const node &a,const node &b,const node &c){//cross product
return abs((a.x*b.y+b.x*c.y+c.x*a.y)-(a.x*c.y+b.x*a.y+c.x*b.y));
}
void work(){
if(D==A||D==B||D==C) puts("");
else{//精度要求较低
if(calc(D,A,B)+calc(D,A,C)+calc(D,B,C)!=calc(A,B,C)) puts("");//面积不等,必在三角形外
else if(!calc(D,A,B)||!calc(D,A,C)||!calc(D,B,C)) puts("");//叉积=0,就在线段上(不严谨..)
else puts("");//只剩下在三角形内
}
}
int main(){
init();
work();
return ;
}

P1355 神秘大三角的更多相关文章

  1. 叉积_判断点与三角形的位置关系 P1355 神秘大三角

    题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三个顶点 第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系 (详见样例) 所有 ...

  2. 洛谷 P1355 神秘大三角(计算几何基础)

    P1355 神秘大三角 题目提供者yeszy 标签 福建省历届夏令营 难度 普及/提高- 题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三 ...

  3. 洛谷 - P1355 - 神秘大三角 - 简单计算几何

    https://www.luogu.org/problemnew/show/P1355 判断一个点和三角形的位置关系,最简单的思路就是用向量. 首先排除掉和三角形顶点重合的情况. 把三角形设计成一个首 ...

  4. 【u027】神秘大三角

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 判断一个点与已知三角形的位置关系. [输入格式] 前三行:每行一个坐标,表示该三角形的三个顶点 第四行 ...

  5. luogu1355 神秘大三角

    题解: 计算几何入门题 按逆时针方向访问三角形的边 然后作叉积判断点是否在边的顺时针方向 叉积和点积都有分配率 但不满足结合律 代码: #include <bits/stdc++.h> u ...

  6. luogu 1355 神秘大三角 判断点和三角形的位置关系 面积法 叉积法

    题目链接 题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三个顶点 第四行:一个点的坐标,试判断该点与前三个点围成三角形的位置关系 (详见样 ...

  7. TYVJ计算几何

    今天讲了计算几何,发几道水水的tyvj上的题解... 计算几何好难啊!@Mrs.General....怎么办.... 这几道题都是在省选之前做的,所以前面的Point运算啊,dcmp啊,什么什么的,基 ...

  8. Codeforces Round #313 (Div. 2) C. Gerald&#39;s Hexagon(补大三角形)

    C. Gerald's Hexagon time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. MathType如何编辑大三角形符号

    MathType中包含的符号超过1000多个,可以满足我们很多学科的使用,尤其是数学中,涉及到很多的符号,常见的就是代数.几何这两大类,当然还有集合之类的符号使用也比较多.我们在用MathType编辑 ...

随机推荐

  1. 数表(bzoj 3529)

    Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a ...

  2. 计算器(bzoj 2242)

    Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...

  3. 【CF1027C】Minimum Value Rectangle(贪心,数学)

    题意:给定n根木棍,不允许拼接或折断,选择四根组成矩形,求所有合法矩形中周长平方与面积比最小的一个,输出拼成这个矩形的四根木棍 n<=1e6 思路:猜结论:答案必定从相邻的4根中产生 证明见ht ...

  4. vue.js源码学习分享(四)

    /** * Generate a static keys string from compiler modules.//从编译器生成一个静态键字符串模块. */ function genStaticK ...

  5. springboot整合mybatis(SSM开发环境搭建)

    0.项目结构: ---------------------方法一:使用mybatis官方提供的Spring Boot整合包实现--------------------- 1.application.p ...

  6. AC日记——【模板】最小费用最大流 P3381

    题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表 ...

  7. AC日记——魔术球问题 洛谷 P2765

    题目描述 «问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2个相邻球的编号之和为完全 ...

  8. Codeforces Gym101606 D.Deranging Hat (2017 United Kingdom and Ireland Programming Contest (UKIEPC 2017))

    D Deranging Hat 这个题简直了,本来想的是冒泡排序然后逆着输出来的,后来发现不对,因为题目上求的是最优解,而且冒泡的话,输出结果有的超出10000行了,所以就是把一开始的,排好序的字母标 ...

  9. Maven的构建配置文件(Build Profiles)

    在命令行使用构建配置文件时,是-P,比如:mvn -Pinput 注意:这里的构建配置文件并不是一个真正的文件,而是通过指定参数来做特定的事. 以下内容引用自https://ayayui.gitboo ...

  10. JS中原型链中的prototype与_proto_的个人理解与详细总结(**************************************************************)

    一直认为原型链太过复杂,尤其看过某图后被绕晕了一整子,今天清理硬盘空间(渣电脑),偶然又看到这图,勾起了点回忆,于是索性复习一下原型链相关的内容,表达能力欠缺逻辑混乱别见怪(为了防止新人__(此处指我 ...