我只是学了一下编程 2021-06-27 17:34 采纳率: 15.4%
浏览 29

● 给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内,给出思路并手写代码 参考回答:

● 给定三角形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删除推荐的项目,支持注册表等