方法一:内角之和等于360度或面积之和等于ABC面积;
以二维点为例:三维同理;

#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<cmath>
#include<unordered_map>
#include <bitset>using namespace std;
struct point{int x;int y;point(int i,int j):x(i),y(j){};
};
double areas(point A,point P,point B)
{point AP(0,0);point PB(0,0);AP.x=P.x-A.x;PB.x=B.x-P.x;AP.y=P.y-A.y;PB.y=B.y-P.y;double s=(AP.x*PB.y-AP.y*PB.x)/2.0;return s;
}
bool Trigon1(point A,point B,point C,point P)
{double apb=areas(A,P,B);double bpc=areas(B,P,C);double cpa=areas(C,P,A);double abc=areas(A,B,C);cout<<apb<<"  "<<bpc<<" "<<cpa<<endl;cout<<abc<<endl;double inacc=apb+bpc+cpa+abc;if(-0.001<inacc && inacc<0.001)return true;elsereturn false;
}
int main() {char *ch="hello world! ";point A(0,4);point B(0,0);point C(4,0);point P(0,1);bool t1=Trigon1(A,B,C,P);cout<<"t1="<<t1<<endl;}


方法二:p点一定在AB边下边,AC边右边,BC边左边;

#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<cmath>
#include<unordered_map>
#include <bitset>using namespace std;
class Vector3
{public:Vector3(float fx, float fy, float fz):x(fx), y(fy), z(fz){}// SubtractVector3 operator - (const Vector3& v) const{//传进来的参数是引用类型,const不允许修改;return Vector3(x - v.x, y - v.y, z - v.z) ;}// Dot product 点乘=|a|*|b|*cos&;float Dot(const Vector3& v) const//const不允许修改*this指针指向的对象{return x * v.x + y * v.y + z * v.z ;}// Cross product 叉积,向量积、叉乘//两向量叉积与这两向量组成的坐标面垂直;Vector3 Cross(const Vector3& v) const{ //(x,  y,  z)//(v.x,v.y,v.z)return Vector3(y * v.z - z * v.y,z * v.x - x * v.z,x * v.y - y * v.x ) ;}public:float x, y, z ;
};
// Determine whether two vectors v1 and v2 point to the same direction
// v1 = Cross(AB, AC)
// v2 = Cross(AB, AP)
bool SameSide(Vector3 A, Vector3 B, Vector3 C, Vector3 P)
{Vector3 AB = B - A ;Vector3 AC = C - A ;Vector3 AP = P - A ;//满足右手定则(按夹角为锐角,顺时针),顺时针由a到b,//大拇指的方向就是e的方向,AP x AB  与 AC x AB 叉乘的结果是同向的,//方向都是垂直三角形ABC这个平面朝上的,Vector3 v1 = AB.Cross(AC) ;Vector3 v2 = AB.Cross(AP) ;// v1 and v2 should point to the same directionreturn v1.Dot(v2) >= 0 ;
}
// Same side method
// Determine whether point P in triangle ABC
bool PointinTriangle1(Vector3 A, Vector3 B, Vector3 C, Vector3 P)
{return SameSide(A, B, C, P) &&SameSide(B, C, A, P) &&SameSide(C, A, B, P) ;
}int main() {char *ch="hello world! ";Vector3 A(0,4,0);Vector3 B(4,0,0);Vector3 C(0,0,0);Vector3 P(1,1,0);bool b=PointinTriangle1(A,B,C,P);cout<<b<<endl;}

16.判断空间某点是否在三角形内相关推荐

  1. 判断一个点是否在指定三角形内(1)

    问题:判断点P是否在三角形ABC内 判断一个点是否在在三角形内,最常用的两种方法:面积法.向量同向法.算法虽然很简单,但要做到高效却不容易,要考虑到二维.三维的区别,还要考虑到坐标是用浮点数还是用整数 ...

  2. Java黑皮书课后题第3章:**3.27(几何:点是否在三角形内)假设一个平面上有一个直角三角形。编写程序,提示用户输入一个点的x坐标和y坐标,然后判断这个点是否在该三角形内

    **3.27(几何:点是否在三角形内)假设一个平面上有一个直角三角形.编写程序,提示用户输入一个点的x坐标和y坐标,然后判断这个点是否在该三角形内 题目 题目描述 破题 运行示例 代码 题目 题目描述 ...

  3. Qt 判断一个点是否落在三角形内(算法)

    利用重心法判断一个点是否落在三角形面积内,三角形的三个点在同一个平面上,如果选中其中一个点,其他两个点不过是相对该点的位移而已,比如选择点A作为起点,那么点B相当于在AB方向移动一段距离得到,而点C相 ...

  4. 面试高频算法题补充系列:如何判断一个点是否在三角形内?

    前言 了解更多常考高频算法题可以关注 公众号:一个搬砖的胖子 企业面试题库:https://codetop.cc/ 小程序:CodeTop 该题曾出现在字节跳动.腾讯.网易.美团.小马智行等公司的面试 ...

  5. 射线与三角形求交,并判断是否在三角形内的完整代码(带测试)

    // Det.cpp : Defines the entry point for the console application. // #include "stdafx.h" # ...

  6. 判断某一点是否在三角形内

    1.同向法 假设点P位于三角形内,会有这样一个规律,当我们沿着ABCA的方向在三条边上行走时,你会发现点P始终位于边AB,BC和CA的右侧.我们就利用这一点,但是如何判断一个点在线段的左侧还是右侧呢? ...

  7. 二维平面上判断点是否在三角形内

    1. 已知三角形的三个顶点坐标,判断某个点是否在三角形中(在三角形的边上,我们也视作在三角形中),本文给出了三种方法. 算法1:利用面积法 如上图所示,如果点P在三角形ABC的内部,则三个小三角形PA ...

  8. 几种方法判断平面点在三角形内

    最近在做一个Unity实现的3D建模软件,其中需要在模型表面进行操作的时候,需要用到点和三角形位置关系的判定算法.由于一个模型往往是几千个三角片,所以这个判定算法必须高效,否则会影响最终程序的整体性能 ...

  9. 阿里云天池超级码力在线编程大赛初赛 第2场 ABCD(A.计算几何 判断点在三角形内 D.大施罗德数/超级卡特兰数)

    心得 打了一下被群友吐槽的比赛,阅读体验极差 阴间题面,读题1小时,AC5min,原题警告 思路来源 https://blog.csdn.net/PleasantlY1/article/details ...

最新文章

  1. 微软企业库4.1学习笔记(八)创建对象 续集2
  2. 邮件系列(二)-发送邮件
  3. Linux常用的基本命令head、tail、tar、grep、date、cal(二)
  4. Boost.Flyweight 复合设计示例
  5. Go三种方式创建赋值map
  6. 牛客练习赛24题解(搜索,DP)
  7. 02.elasticsearch-monitor使用独立的集群存储监控data
  8. jvm 垃圾收集算法_JVM垃圾收集和优化
  9. JS面向对象编程实现
  10. 三、比特币白皮书:一种点对点的电子现金系统
  11. 分享按钮 html代码,超简洁微博分享按钮代码
  12. java—IO流——读取键盘输入的字母并转换成大写字母输出在控制台上
  13. pythonguitkinter编程入门_Python Tkinter GUI编程入门介绍
  14. 斯坦福吴恩达《机器学习》--增强学习
  15. python有哪些函数怎么用_必须掌握的常用python函数有哪些?
  16. CCNA学习指南 第八章 下载
  17. PRML Chapter 02 Probability Distributions
  18. 频响函数和传递函数详解-工程实例
  19. C语言超级搞笑的代码,冷笑话我们程序员也会讲的啊!
  20. 最新章节 第238章 超级计算机的安排,第238章 黄花大闺女

热门文章

  1. 颈椎前路caspar撑开器_间盘切除前椎间隙撑开在颈椎前路手术中的应用
  2. 图书推荐|一本图像/视频处理的强大工具书
  3. 想跳槽涨薪的必看!企业java开发用什么软件
  4. Echarts饼图中间添加文字
  5. JavaScript原型继承详细解读
  6. tp6.1多应用控制器不存在:app\应用名\controller\应用名
  7. 月经逆行、体能差、雌激素影响心态……女性进入太空,要经历哪些科技伪命题?...
  8. clock-gating整理
  9. 调试、条件处理和防御式编程
  10. 座舱交互的下一个时代