题目描述

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

输入输出格式

输入格式:

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

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

(详见样例)

所有坐标值均为整数。

输出格式:

若点在三角形内(不含边界),输出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. [jsp学习笔记] jsp基础知识 数据初始化、同步

  2. MySQL连接查询流程源码

    http://blog.itpub.net/29510932/viewspace-2129300/ 初始化: 点击(此处)折叠或打开 main |-mysqld |-my_init // 初始话线程变 ...

  3. SQL SERVER-修改TempDB路径

    --查看tempdb文件信息 use tempdb go sp_helpfile go --修改路径 use master go Alter database tempdb modify file ( ...

  4. Android自动化测试探索(四)uiautomator2简介和使用

    uiautomator2简介 项目Git地址: https://github.com/openatx/uiautomator2 安装 #1. 安装 uiautomator2 使用pip进行安装, 注意 ...

  5. idea中添加web.xml配置文件与tomcat启动中遇到的web.xml文件找不到的问题

    1,如何在idea中向war项目中添加web.xml的配置文件 idea通过maven创建war项目时没有指定是webapp导致创建出来的项目没有webapp的文件夹.其实war项目中都是在" ...

  6. 最新my.cnf可用于5.6&5.7

    [MySQL]prompt = [\\u@\\h][\\d]>\\_  #自定义登录提示信息 [mysqld]#基本设置#user = mysql #用户名sql_mode =“STRICT_T ...

  7. 国际化(i18n) 各国语言缩写

    internationalization (国际化)简称:i18n,因为在i和n之间还有18个字符,localization(本地化 ),简称L10n. 一般用语言_地区的形式表示一种语言,如:zh_ ...

  8. python高级特性-生成器

    在python中一边循环一边计算的机制成为生成器(generator) 在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行. 生成list > ...

  9. linux系统编程之信号(五)

    今天继续对信号进行学习,开始正入正题: sigaction函数: 安装信号之前我们已经学过一个函数:signal,它最早是在unix上出现的,它是对不可靠信号进行安装的,之后出现了可靠信号和实时信号, ...

  10. 4.Linq to Xml

    目录 1.Linq to Xml函数构造方法 2.创建包含文本节点的Xml文档 3.保存和加载Xml 4.处理Xml片段 5.从数据库中生成XML 1.Linq to Xml函数构造方法 Linq t ...