题目描述

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

输入输出格式

输入格式:

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

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

(详见样例)

所有坐标值均为整数。

输出格式:

若点在三角形内(不含边界),输出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. python 协程池和pool.map用法

    一.问题描述 现在有一段代码,需要扫描一个网段内的ip地址,是否可以ping通. 执行起来效率太慢,需要使用协程. #!/usr/bin/env python # -*- coding: utf-8 ...

  2. Java8系列 (三) Spliterator可分迭代器

    本文转载自 jdk8 Stream 解析2 - Spliterator分割迭代器. 概述 我们最为常见的流的产生方式是 collection.stream(), 你点开Stream()方法, 他是通过 ...

  3. 缺陷的背后(四)---多进程之for循环下fork子进程引发bug

    导语 业务模块为实现高并发时的更快的处理速度,经常会采用多进程的方式去处理业务.多进程模式下常见的三种bug:for循环下fork子进程导致产生无数孙子进程,僵尸进程,接口窜包.本章主要介绍第一种常见 ...

  4. 【转载】C#使用Math.Floor方法来向下取整

    在C#的数值运算中,有时候需要对计算结果舍去小数位保留整数位向下取整即可,此时就可使用内置方法Math.Floor来实现向下取整操作,Math.Floor方法将舍去小数部分,保留整数.Math.Flo ...

  5. 仿EXCEL插件,智表ZCELL产品V1.6 版本发布,增加自定义事件功能

    详细请移步 智表(ZCELL)官网www.zcell.net 更新说明  这次更新主要应用户要求,主要解决了单元格值变化时事件的支持,并新增了按单元格名操作的相关API,欢迎大家体验使用. 本次版本更 ...

  6. 行内块inline-block元素之间出现空白间隙原因及解决办法

    首先,来看下具体的问题,下面是用inline-block布局实现的两边固定宽度,中间自适应的html代码: 1 2 3 4 5 6 7 8 9 <section class="layo ...

  7. 修改网口速度mii-tool和ethtool

    mii-tool # mii-tool -F 100baseTx-FD media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10base ...

  8. 笔谈OpenGL ES(三)

    昨天下午以及今天一天,公司安排了新员工培训课程,占用了自己的一些时间,但是也了解到一些新的有利于自身的东西.进公司就要进有完善公司体系和制度的公司,小公司真的是没搞头的,我体验过,反正小公司以后是不会 ...

  9. RestTemplate的GET与POST

    发送GET请求: //设置请求头HttpHeaders headers = new HttpHeaders(); headers.add("token",PostUtils.get ...

  10. Ansible_Day1

    1.传统运维&自动化运维概念 1)传统的运维概念(硬件.软件.系统.网络) 手工安装系统.机房建设: 软件服务配置.部署通过手工的操作: 没有自动化脚本.流程: 依靠大量的运维人员完成任务: ...