题目链接

题目描述

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

输入输出格式

输入格式:

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

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

(详见样例)

所有坐标值均为整数。

输出格式:

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

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

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

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

输入输出样例

输入样例#1:

(0,0)
(3,0)
(0,3)
(1,1)

输出样例#1:

1

法一:面积法

连结第四个点和三角形的三个顶点,得到三个三角形,若这三个三角形的面积之和等于原三角形面积,则该点在三角形内。

其他情况相应特判即可。

Code

#include <bits/stdc++.h>
#define eps 1e-6
using namespace std;
double dist(int x1, int y1, int x2, int y2) {
return sqrt(pow(x2-x1,2) + pow(y2-y1,2));
}
double area(int x1, int y1, int x2, int y2, int x3, int y3) {
double a = dist(x1,y1,x2,y2), b = dist(x1,y1,x3,y3), c = dist(x2,y2,x3,y3);
double p = (a+b+c)/2;
return sqrt(p*(p-a)*(p-b)*(p-c));
}
int main() {
int x1,y1,x2,y2,x3,y3,x,y;
scanf("(%d,%d)\n(%d,%d)\n(%d,%d)\n(%d,%d)", &x1, &y1, &x2, &y2, &x3, &y3, &x, &y);
if ((x==x1&&y==y1) || (x==x2&&y==y2) || (x==x3&&y==y3)) { putchar('4'); return 0; }
double s1 = area(x1,y1,x2,y2,x,y),
s2 = area(x1,y1,x3,y3,x,y),
s3 = area(x3,y3,x2,y2,x,y),
s = area(x1,y1,x2,y2,x3,y3);
if (s1+s2+s3-s>eps) { putchar('2'); return 0; }
if (fabs(s1)<eps || fabs(s2)<eps || fabs(s3)<eps) { putchar('3'); return 0; }
putchar('1');
return 0;
}

法二:叉积法

理论依据

\(\overrightarrow{P0P1}\times \overrightarrow{P0P2}\gt 0\leftrightarrow P1在P2的顺时针方向(相对P0)\)

\(\overrightarrow{P0P1}\times \overrightarrow{P0P2}\lt 0\leftrightarrow P1在P2的逆时针方向(相对P0)\)

\(\overrightarrow{P0P1}\times \overrightarrow{P0P2}= 0\leftrightarrow P1,P2,P0三点共线\)

仍然连结第四个点和三角形的三个顶点,算出三个叉积,如果同正或同负,则在三角形内;

如果有一个为\(0\),另两个同号,则在三角形边上。

Code

#include <bits/stdc++.h>
#define eps 1e-6
using namespace std;
int vec(int x1, int y1, int x2, int y2, int x0, int y0) {
return (x1-x0) * (y2-y0) - (x2-x0) * (y1-y0);
}
int main() {
int x1,y1,x2,y2,x3,y3,x,y;
scanf("(%d,%d)\n(%d,%d)\n(%d,%d)\n(%d,%d)", &x1, &y1, &x2, &y2, &x3, &y3, &x, &y);
if ((x==x1&&y==y1) || (x==x2&&y==y2) || (x==x3&&y==y3)) { putchar('4'); return 0; }
int c1 = vec(x1, y1, x2, y2, x, y),
c2 = vec(x2, y2, x3, y3, x, y),
c3 = vec(x3, y3, x1, y1, x, y);
if ((c1>0&&c2>0&&c3>0) || (c1<0&&c2<0&&c3<0)) { putchar('1'); return 0; }
if ((c1==0&&c2*c3>0) || (c2==0&&c1*c3>0) || (c3==0&&(c1*c2>0))) putchar('3');
else putchar('2');
return 0;
}

luogu 1355 神秘大三角 判断点和三角形的位置关系 面积法 叉积法的更多相关文章

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

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

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

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

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

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

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

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

  5. 【u027】神秘大三角

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

  6. P1355 神秘大三角

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

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

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

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

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

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

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

随机推荐

  1. [BZOJ] 1520: [POI2006]Szk-Schools

    费用流解决. abs内传不了int..CE一次 #include<iostream> #include<cstring> #include<cstdio> #inc ...

  2. 文件处理seek以及修改内容的两种方式

    f.seek(offset,whence)offset代表文件的指针的偏移量,单位是字节byteswhence代表参考物,有三个取值# 0:参照文件的开头# 1:参照当前文件指针所在位置# 2: 参照 ...

  3. javascript实现原生ajax的几种方法介绍

    自从javascript有了各种框架之后,比如jquery,使用ajax已经变的相当简单了.但有时候为了追求简洁,可能项目中不需要加载jquery这种庞大的js插件.但又要使用到ajax这种功能该如何 ...

  4. python爬虫基础12-selenium大全6/8-等待

    Selenium笔记(6)等待 本文集链接:https://www.jianshu.com/nb/25338984 简介 在selenium操作浏览器的过程中,每一次请求url,selenium都会等 ...

  5. Kattis - doubleclique (图论)

    From : North American Invitational Programming Contest 2018 给你一个图,以及它的补图.如果部分点在原图中是团,并且其他的所有点在补图中也是团 ...

  6. 水题:UVa489-Hangman Judge

    Hangman Judge Time limit 3000 ms Description In Hangman Judge, you are to write a program that judge ...

  7. activity-alias

    activity-alias标签,它有一个属性叫android:targetActivity,这个属性就是用来为该标签设置目标Activity的,或者说它就是这个目标Activity的别名.至此我们已 ...

  8. Django Model one

    models :URL---->http://www.cnblogs.com/wupeiqi/p/6216618.html null                     数据库中字段是否可以 ...

  9. Android之高效率截图

    本文来自网易云社区 作者:孙圣翔 在一张Android手机上截图有好多办法,为了能够高效率的截图,我几乎把所有的方法都尝试了一般.走了好多路,也遇到了好多的问题. 只是想记录下这其中的不容易. 下面所 ...

  10. [转载]ExtJs4 笔记(1) ExtJs大比拼JQuery:Dom文档操作

    出处:[Lipan] (http://www.cnblogs.com/lipan/) 现在主流的JS框架要数ExtJs和JQuery应用的比较广泛.JQuery属于轻量级的,一般做网站应用比较常见,可 ...