● 给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内,给出思路并手写代码
参考回答:
根据面积法,如果P在三角形ABC内,那么三角形ABP的面积+三角形BCP的面积+三角形ACP的面积应该等于三角形ABC的面积。算法如下:
#include
#include
using namespace std;
#define ABS_FLOAT_0 0.0001
struct point_float
{
float x;
float y;
};
/**
* @brief 计算三角形面积
*/
float GetTriangleSquar(const point_float pt0, const point_float pt1, const point_float pt2)
{
point_float AB, BC;
AB.x = pt1.x - pt0.x;
AB.y = pt1.y - pt0.y;
BC.x = pt2.x - pt1.x;
BC.y = pt2.y - pt1.y;
return fabs((AB.x * BC.y - AB.y * BC.x)) / 2.0f;
}
/**
* @brief 判断给定一点是否在三角形内或边上
*/
bool IsInTriangle(const point_float A, const point_float B, const point_float C, const point_float D)
{
float SABC, SADB, SBDC, SADC;
SABC = GetTriangleSquar(A, B, C);
SADB = GetTriangleSquar(A, D, B);
SBDC = GetTriangleSquar(B, D, C);
SADC = GetTriangleSquar(A, D, C);
float SumSuqar = SADB + SBDC + SADC;
if ((-ABS_FLOAT_0 < (SABC - SumSuqar)) && ((SABC - SumSuqar) < ABS_FLOAT_0))
{
return true;
}
else
{
return false;
}
}
1条回答 默认 最新
- 小P聊技术 2021-06-28 16:02关注
#include "util.h" using namespace std; #define ABS_FLOAT_0 0.0001 struct point_float{ float x; float y; }; float GetTriangleSquar(const point_float pt0,const point_float pt1, const point_float pt2){ point_float AB, BC; AB.x = pt1.x - pt0.x; AB.y = pt1.y - pt0.y; BC.x = pt2.x - pt1.x; BC.y = pt2.y - pt1.y; return fabs((AB.x * BC.y - AB.y * BC.x)) / 2.0f; } bool IsInTriangle(const point_float A, const point_float B, const point_float C, const point_float D){ float SABC, SADB, SBDC, SADC; SABC = GetTriangleSquar(A,B,C); SADB = GetTriangleSquar(A,D,B); SADC = GetTriangleSquar(A,D,C); SBDC = GetTriangleSquar(B,D,C); float SumSuqar = SADC + SBDC + SBDC; if(((SABC - SumSuqar) >= -ABS_FLOAT_0) && ((SABC - SumSuqar) <= ABS_FLOAT_0)){//怎么判断两个float值是否相等呢?通过他们的差值和精度的正负比较 return true; } else{ return false; } } int main (){ return 0; }
PS:关于三角形求面积所用的公式,用的是叉乘求面积:
已知三顶点坐标,求三角形的面积
当然了,也可以使用海伦公式啦。解决 无用评论 打赏 举报
悬赏问题
- ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
- ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
- ¥15 Centos / PETSc / PETGEM
- ¥15 centos7.9 IPv6端口telnet和端口监控问题
- ¥120 计算机网络的新校区组网设计
- ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
- ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
- ¥20 海浪数据 南海地区海况数据,波浪数据
- ¥20 软件测试决策法疑问求解答
- ¥15 win11 23H2删除推荐的项目,支持注册表等