16.判断空间某点是否在三角形内
方法一:内角之和等于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)
问题:判断点P是否在三角形ABC内 判断一个点是否在在三角形内,最常用的两种方法:面积法.向量同向法.算法虽然很简单,但要做到高效却不容易,要考虑到二维.三维的区别,还要考虑到坐标是用浮点数还是用整数 ...
- Java黑皮书课后题第3章:**3.27(几何:点是否在三角形内)假设一个平面上有一个直角三角形。编写程序,提示用户输入一个点的x坐标和y坐标,然后判断这个点是否在该三角形内
**3.27(几何:点是否在三角形内)假设一个平面上有一个直角三角形.编写程序,提示用户输入一个点的x坐标和y坐标,然后判断这个点是否在该三角形内 题目 题目描述 破题 运行示例 代码 题目 题目描述 ...
- Qt 判断一个点是否落在三角形内(算法)
利用重心法判断一个点是否落在三角形面积内,三角形的三个点在同一个平面上,如果选中其中一个点,其他两个点不过是相对该点的位移而已,比如选择点A作为起点,那么点B相当于在AB方向移动一段距离得到,而点C相 ...
- 面试高频算法题补充系列:如何判断一个点是否在三角形内?
前言 了解更多常考高频算法题可以关注 公众号:一个搬砖的胖子 企业面试题库:https://codetop.cc/ 小程序:CodeTop 该题曾出现在字节跳动.腾讯.网易.美团.小马智行等公司的面试 ...
- 射线与三角形求交,并判断是否在三角形内的完整代码(带测试)
// Det.cpp : Defines the entry point for the console application. // #include "stdafx.h" # ...
- 判断某一点是否在三角形内
1.同向法 假设点P位于三角形内,会有这样一个规律,当我们沿着ABCA的方向在三条边上行走时,你会发现点P始终位于边AB,BC和CA的右侧.我们就利用这一点,但是如何判断一个点在线段的左侧还是右侧呢? ...
- 二维平面上判断点是否在三角形内
1. 已知三角形的三个顶点坐标,判断某个点是否在三角形中(在三角形的边上,我们也视作在三角形中),本文给出了三种方法. 算法1:利用面积法 如上图所示,如果点P在三角形ABC的内部,则三个小三角形PA ...
- 几种方法判断平面点在三角形内
最近在做一个Unity实现的3D建模软件,其中需要在模型表面进行操作的时候,需要用到点和三角形位置关系的判定算法.由于一个模型往往是几千个三角片,所以这个判定算法必须高效,否则会影响最终程序的整体性能 ...
- 阿里云天池超级码力在线编程大赛初赛 第2场 ABCD(A.计算几何 判断点在三角形内 D.大施罗德数/超级卡特兰数)
心得 打了一下被群友吐槽的比赛,阅读体验极差 阴间题面,读题1小时,AC5min,原题警告 思路来源 https://blog.csdn.net/PleasantlY1/article/details ...
最新文章
- 微软企业库4.1学习笔记(八)创建对象 续集2
- 邮件系列(二)-发送邮件
- Linux常用的基本命令head、tail、tar、grep、date、cal(二)
- Boost.Flyweight 复合设计示例
- Go三种方式创建赋值map
- 牛客练习赛24题解(搜索,DP)
- 02.elasticsearch-monitor使用独立的集群存储监控data
- jvm 垃圾收集算法_JVM垃圾收集和优化
- JS面向对象编程实现
- 三、比特币白皮书:一种点对点的电子现金系统
- 分享按钮 html代码,超简洁微博分享按钮代码
- java—IO流——读取键盘输入的字母并转换成大写字母输出在控制台上
- pythonguitkinter编程入门_Python Tkinter GUI编程入门介绍
- 斯坦福吴恩达《机器学习》--增强学习
- python有哪些函数怎么用_必须掌握的常用python函数有哪些?
- CCNA学习指南 第八章 下载
- PRML Chapter 02 Probability Distributions
- 频响函数和传递函数详解-工程实例
- C语言超级搞笑的代码,冷笑话我们程序员也会讲的啊!
- 最新章节 第238章 超级计算机的安排,第238章 黄花大闺女