题目描述

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

输入输出格式

输入格式:

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

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

(详见样例)

所有坐标值均为整数。

输出格式:

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

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

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

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

输入输出样例

输入样例#1: 复制

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

1

说明

【数据规模与约定】

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

//Pro: P1355 神秘大三角
//Strategy: cross product //叉积判断点与三角形的位置关系,精度高
//若点在三角形内(不含边界),输出1;
//若点在三角形外(不含边界),输出2;
//若点在三角形边界上(不含顶点),输出3;
//若点在三角形顶点上,输出4。 //设三角形三个顶点是A,B,C,要判断的点是P
//由于输入的是整数,所以就比较容易了,不用担心精度问题。 //点:判断在不在点上直接判就好了
//边:如果P在三角形的边所在直线上,那么P与边的端点构成的向量的叉积==0,如果P的坐标还在端点之间,那就在线段上了
//内外:将每条边看成是一个向量,那么可以有三条不同终点的向量
//在这儿规定这三个向量是AB,BC,CA,那么P指向这三个向量的终点,也可以对应得到三个向量PA,PB,PC
//如果对应的向量的叉积(如AB*PA)的值里有任意一个是负的,那么P就在三角形外,
//否则若都是正的,就在三角形内 #include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std; struct Point //存点
{
int x,y;
Point(int x=,int y=){this->x=x,this->y=y;}
Point operator + (const Point &a)
{
return Point(this->x+a.x,this->y+a.y);
}
Point operator - (const Point &a)
{
return Point(this->x-a.x,this->y-a.y);
}
int operator * (const Point &a)
{
return this->x*a.y-this->y*a.x;
}
}A,B,C,P; bool On_Point() //在端点上
{
if(P.x-A.x==&&P.y-A.y==)
return true;
if(P.x-B.x==&&P.y-B.y==)
return true;
if(P.x-C.x==&&P.y-C.y==)
return true;
return false;
} bool On_Edge() //在边上
{
if((P-A)*(P-B)==&&min(A.x,B.x)<=P.x&&min(A.y,B.y)<=P.y&&max(A.x,B.x)>=P.x&&max(A.y,B.y)>=P.y)
return true;
if((P-B)*(P-C)==&&min(B.x,C.x)<=P.x&&min(B.y,C.y)<=P.y&&max(B.x,C.x)>=P.x&&max(B.y,C.y)>=P.y)
return true;
if((P-A)*(P-C)==&&min(A.x,C.x)<=P.x&&min(A.y,C.y)<=P.y&&max(A.x,C.x)>=P.x&&max(A.y,C.y)>=P.y)
return true;
return false;
} bool inside() //在不在三角形内
{
if((B-A)*(P-A)<)
return false;
if((C-B)*(P-B)<)
return false;
if((A-C)*(P-C)<)
return false;
return true;
} char c;
int main()
{
scanf("%*c%d%*c%d%*c",&A.x,&A.y);
getchar();getchar();
scanf("%*c%d%*c%d%*c",&B.x,&B.y);
getchar();getchar();
scanf("%*c%d%*c%d%*c",&C.x,&C.y);
getchar();getchar();
scanf("%*c%d%*c%d%*c",&P.x,&P.y);
if((B-A)*(C-A)<) //重构三角形的顶点,让三角形当A在上时,B左C右
swap(A,B);
if(On_Point())
puts("");
else if(On_Edge())
puts("");
else if(!inside())
puts("");
else
puts("");
return ;
}

叉积_判断点与三角形的位置关系 P1355 神秘大三角的更多相关文章

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

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

  2. [fzu 2273]判断两个三角形的位置关系

    首先判断是否相交,就是枚举3*3对边的相交关系. 如果不相交,判断包含还是相离,就是判断点在三角形内还是三角形外.两边各判断一次. //http://acm.fzu.edu.cn/problem.ph ...

  3. 判断两条直线的位置关系 POJ 1269 Intersecting Lines

    两条直线可能有三种关系:1.共线     2.平行(不包括共线)    3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...

  4. POJ_2318_TOYS&&POJ_2398_Toy Storage_二分+判断直线和点的位置关系

    POJ_2318_TOYS&&POJ_2398_Toy Storage_二分+判断直线和点的位置 Description Calculate the number of toys th ...

  5. Cupid's Arrow---hdu1756(判断点与多边形的位置关系 模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1756 题意:中文题,套模板即可: /* 射线法:判断一个点是在多边形内部,边上还是在外部,时间复杂度为 ...

  6. LightOj1190 - Sleepwalking(判断点与多边形的位置关系--射线法模板)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1190 题意:给你一个多边形含有n个点:然后又m个查询,每次判断点(x, y)是否在多边 ...

  7. POJ 1269 /// 判断两条直线的位置关系

    题目大意: t个测试用例 每次给出一对直线的两点 判断直线的相对关系 平行输出NODE 重合输出LINE 相交输出POINT和交点坐标 1.直线平行 两向量叉积为0 2.求两直线ab与cd交点 设直线 ...

  8. POJ 2318 /// 判断点与直线的位置关系

    题目大意: n块玩具箱隔板 m个玩具落地点 给定玩具箱的左上和右下两个端点 接下来给定n块隔板的上点的x和下点的x(因为y就是玩具箱的上下边缘) 接下来给定m个玩具落地点 输出n+1个区域各有的玩具数 ...

  9. Segments---poj3304(判断直线与线段的位置关系)

    题目链接:http://poj.org/problem?id=3304 题意:给你n个线段,求是否有一条直线与所有的线段都相交,有Yes,没有No; 枚举所有的顶点作为直线的两点,然后判断这条直线是否 ...

随机推荐

  1. (转)项目迁移_.NET项目迁移到.NET Core操作指南

    原文地址:https://www.cnblogs.com/heyuquan/p/dotnet-migration-to-dotnetcore.html 这篇文章,汇集了大量优秀作者写的关于" ...

  2. (八) Docker 部署 mongodb

    参考并感谢 官方文档 https://hub.docker.com/_/mongo 下载mongo镜像(不带tag标签则表示下载latest版本) docker pull mongo 启动 mongo ...

  3. 利用PHPExcel快速导出excel

    <?php $objPHPExcel = new PHPExcel(); $objSheet = $objPHPExcel->getActiveSheet(); $array = arra ...

  4. 【洛谷 P4248】 [AHOI2013]差异(后缀自动机)

    题目链接 \[ans=\sum_{1<=i<j<=n}len(T_i)+len(T_j)-2*lcp(T_i,T_j)\] 观察这个式子可以发现,前面两个\(len\)是常数,后面的 ...

  5. Java 之 方法引用

    方法引用 一.冗余的Lambda场景 来看一个简单的函数式接口以应用Lambda表达式: @FunctionalInterface public interface Printable { void ...

  6. Ldr和bl指令

    Ldr和bl在启动程序中,都是可以负责pc跳转的指令. 1)bl是地址无关指令,和什么地址无关呢?和当前的运行地址无关,链接器脚本中标明了一个运行地址,但是arm中的代码实际是从地址0开始运行的.这个 ...

  7. 从零开始学虚拟DOM

    此文主要翻译自:Building a Simple Virtual DOM from Scratch,看原文的同学请直达! 此文是作者在一次现场编程演讲时现场所做的,有关演讲的相关资料我们也可以在原英 ...

  8. Dubbo 高级特性实践-泛化调用

    引言 当后端Java服务用Dubbo协议作为RPC方案的基础,但部分消费方是前端Restful的PHP服务,不能直接调用,于是在中间架设了Router服务提供统一的基于HTTP的后端调用入口. 而Ro ...

  9. WebSocket转载

    目录   概述  WebSocket 客户端  WebSocket 服务端  WebSocket 代理  FAQ  完整示例  资料 概述 WebSocket 是什么? WebSocket 是一种网络 ...

  10. Android笔记(七十二) Style和Theme

    我们尝尝需要使用setText.setColor.setTextSize等属性来设置控件的样式,但是每个控件都需要设置这些属性,工作量无疑是巨大的,并且后期维护起来也不方便. Style Androi ...