题目描述

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

输入输出格式

输入格式:

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

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

(详见样例)

所有坐标值均为整数。

输出格式:

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

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

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

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

输入输出样例

输入样例#1:

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

  1. 1

说明

【数据规模与约定】

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

 
本题数据较弱,怎么搞都可以A。就当练练思路吧。
  1. //自己脑洞的AC代码
  2. #include<cstdio>
  3. #include<cmath>
  4. using namespace std;
  5. int read(){
  6. int x=,f=;char ch=getchar();
  7. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  8. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  9. return x*f;
  10. }
  11. const double Pi=acos(-);
  12. struct node{
  13. int x,y;
  14. bool operator ==(const node &a){
  15. return x==a.x&&y==a.y;
  16. }
  17. }A,B,C,D;
  18. void init(){
  19. A.x=read();A.y=read();
  20. B.x=read();B.y=read();
  21. C.x=read();C.y=read();
  22. D.x=read();D.y=read();
  23. }
  24. double slop(node a,node b){
  25. if(a.x==b.x) return 1e9;
  26. return (double)(a.y-b.y)/(double)(a.x-b.x);
  27. }
  28. bool deal(node a,node b){//精度要求较高
  29. node t1,t2;
  30. t1.x=a.x-D.x;t1.y=a.y-D.y;
  31. t2.x=b.x-D.x;t2.y=b.y-D.y;
  32. double xiang=(double)(t1.x*t2.x+t1.y*t2.y);
  33. double mo=sqrt((t1.x*t1.x+t1.y*t1.y)*(t2.x*t2.x+t2.y*t2.y));
  34. double cita=xiang/mo;
  35. if(acos(cita)==Pi) return ;
  36. else return ;
  37. }
  38. void work(){
  39. if(D==A||D==B||D==C){puts("");return ;}
  40. //点积求角 180则共线
  41. if(deal(A,B)){puts("");return ;}
  42. if(deal(A,C)){puts("");return ;}
  43. if(deal(B,C)){puts("");return ;}
  44. //判断点是否在三角形中
  45. //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
  46. if(slop(A,B)!=slop(A,C)&&slop(A,D)!=slop(B,C)
  47. &&(slop(A,D)-slop(A,B))*(A.x-B.x)*(slop(A,D)-slop(A,C))*(A.x-C.x)<=
  48. &&(slop(A,D)-slop(B,C))*(A.x-D.x)*(slop(B,D)-slop(B,C))*(B.x-D.x)<){
  49. puts("");
  50. }
  51. else puts("");
  52. }
  53. int main(){
  54. init();
  55. work();
  56. return ;
  57. }
  1. //题解更好思路的AC代码
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cmath>
  5. using namespace std;
  6. int read(){
  7. int x=,f=;char ch=getchar();
  8. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  9. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  10. return x*f;
  11. }
  12. struct node{
  13. int x,y;
  14. bool operator ==(const node &a){
  15. return x==a.x&&y==a.y;
  16. }
  17. }A,B,C,D;
  18. void init(){
  19. A.x=read();A.y=read();
  20. B.x=read();B.y=read();
  21. C.x=read();C.y=read();
  22. D.x=read();D.y=read();
  23. }
  24. int calc(const node &a,const node &b,const node &c){//cross product
  25. 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));
  26. }
  27. void work(){
  28. if(D==A||D==B||D==C) puts("");
  29. else{//精度要求较低
  30. if(calc(D,A,B)+calc(D,A,C)+calc(D,B,C)!=calc(A,B,C)) puts("");//面积不等,必在三角形外
  31. else if(!calc(D,A,B)||!calc(D,A,C)||!calc(D,B,C)) puts("");//叉积=0,就在线段上(不严谨..)
  32. else puts("");//只剩下在三角形内
  33. }
  34. }
  35. int main(){
  36. init();
  37. work();
  38. return ;
  39. }

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. Java 微信公众号开发--- 接入微信

    开发微信公众号在没有正式的公众平台账号时,我们可以使用测试平台账号--- 测试平台申请地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandb ...

  2. APUE 学习笔记(七) 信号

    1.信号是软件中断,提供一种异步处理事件的方法 很多事件产生信号: (1)用户按下某些中断键,如 Ctrl + C键产生 SIGINT信号 (2)硬件异常产生信号,比如 除数为0,无效的内存引用  ( ...

  3. SPOJ QTREE4 - Query on a tree IV

    You are given a tree (an acyclic undirected connected graph) with N nodes, and nodes numbered 1,2,3. ...

  4. Codeforces878C. Tournament

    $n \leq 50000$个人,每个人有$K \leq 10$个属性,现对每一个前缀问:进行比赛,每次任意两人比任意属性,小的淘汰(保证同一属性不会出现两个相同的数),最终有几个人有可能获胜. 明显 ...

  5. declaration specifier, declarator, type specifier

    static struct abc * b; static struct abc : declaration specifier * b : declarator struct abc : type ...

  6. Day 16 之二 省市县三级联动

    摘录自:雨神,供参考! province_dic = { "河北": { "石家庄": ["鹿泉", "藁城", &qu ...

  7. ecshop二次开发系统缓存优化之扩展数据缓存的必要性与方法

    1.扩展数据缓存的必要性 大家都知道ecshop系统使用的是静态模板缓存,在后台可以设置静态模板的缓存时间,只要缓存不过期,用户访问页面就相当于访问静态页面,速度可想而知,看似非常完美,但是ecsho ...

  8. [ASP.NET Core] Tips

    让Cache支持SetObject using Microsoft.AspNetCore.Http; using Newtonsoft.Json; public static class Sessio ...

  9. vs-插件+配置

    { "window.zoomLevel": 0, "files.autoSave": "off", "editor.fontSiz ...

  10. (1)angularJs

    一. 1.下载 https://angularjs.org/ 2.网络引用 https://code.angularjs.org/ 3.模块内引用 angularjs <body ng-app& ...