zoukankan      html  css  js  c++  java
  • 给定三角形ABC和一点P(x,y,z),判断点P是否在ABC内,给出思路并手写代码

    根据面积法,如果P在三角形ABC内,那么三角形ABP的面积+三角形BCP的面积+三角形ACP的面积应该等于三角形ABC的面积。算法如下:

    #include<iostream>
    #include<math.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);
        SBDC = GetTriangleSquar(B, D, C);
        SADC = GetTriangleSquar(A, D, C);
        float SumSuqar = SADB + SBDC + SADC;
        if ((-0.0001 < (SABC - SumSuqar)) && ((SABC - SumSuqar) < 0.0001))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    int main()
    {
        point_float pt0;
        pt0.x = 0;
        pt0.y = 0;
        point_float pt1;
        pt1.x = 0;
        pt1.y = 3;
        point_float pt2;
        pt2.x = 4;
        pt2.y = 0;
        point_float pt3;
        pt3.x = 4;
        pt3.y = 0;
        int a, b;
        a=GetTriangleSquar(pt0, pt1, pt2);
        b=IsInTriangle(pt0, pt1, pt2, pt3);
        cout << a << "  " << b << endl;
        system("pause");
        return 0;
    }
  • 相关阅读:
    iOS,Layer
    iOS 手势冲突
    ECharts
    手动安装Package Control
    webstorm配置svn详解
    js 对象 类型转换
    google 跨域解决办法
    关于内层DIV设置margin-top不起作用的解决方案
    图片与文字在div里实现垂直水平都居中
    css3之3D翻牌效果
  • 原文地址:https://www.cnblogs.com/277223178dudu/p/11063293.html
Copyright © 2011-2022 走看看