怎样判断一个坐标是否在已知三角形内?

原创 2006年05月22日 20:21:00

       根据直线Ax+By+C=0和点P的关系知识可知,把点P代入式子Ax+By+C的值的正负,来判断点P在直线的位置。

又知三角形的内心必在三角形内部,所以我们可以把测试点和内心比较,即可得出该点是否在三角形内部。

源代码:(在BCB6.0测试通过)

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    float fPointX1,fPointY1;
    float fPointX2,fPointY2;
    float fPointX3,fPointY3;
    float k1,b1,k2,b2,k3,b3;

    char cFlag1 = 0;
    char cFlag2 = 0;

    float fTestPX =232,fTestPY = 192;
    float fInX,fInY;

    fPointX1 = 72;
    fPointY1 = 56;

    fPointX2 = 104;
    fPointY2 = 208;

    fPointX3 = 280;
    fPointY3 = 136;

    float temp1 =  sqrt( Power(fPointX3-fPointX2,2)+Power(fPointY3-fPointY2,2) );
    float temp2 =  sqrt( Power(fPointX3-fPointX1,2)+Power(fPointY3-fPointY1,2) );
    float temp3 =  sqrt( Power(fPointX2-fPointX1,2)+Power(fPointY2-fPointY1,2) );

    //得到该三角形的内心,内心必在三角形内部
    fInX = ((temp1*fPointX1)+(temp2*fPointX2)+(temp3*fPointX3))/(temp1+temp2+temp3);
    fInY = ((temp1*fPointY1)+(temp2*fPointY2)+(temp3*fPointY3))/(temp1+temp2+temp3);


    //得到三角形 三个边的直线方程系数
    k1 = (fPointY2-fPointY1)/(fPointX2-fPointX1);
    b1 = fPointY1-k1*fPointX1;

    k2 = (fPointY3-fPointY2)/(fPointX3-fPointX2);
    b2 = fPointY2-k2*fPointX2;

    k3 = (fPointY3-fPointY1)/(fPointX3-fPointX1);
    b3 = fPointY3-k3*fPointX3;

    //得到内心的 对应数的值
    if (k1*fInX-fInY+b1 > 1e-6)
        cFlag1 = cFlag1 | 0200;
    else
        cFlag1 = cFlag1 | 0100;

    if (k2*fInX-fInY+b2 > 1e-6)
        cFlag1 = cFlag1 | 0020;
    else
        cFlag1 = cFlag1 | 0010;

    if (k3*fInX-fInY+b3 > 1e-6)
        cFlag1 = cFlag1 | 0002;
    else
        cFlag1 = cFlag1 | 0001;

    //检验对应点

    if (k1*fTestPX-fTestPY+b1 > 1e-6)
        cFlag2 = cFlag2 | 0200;
    else
        cFlag2 = cFlag2 | 0100;

    if (k2*fTestPX-fTestPY+b2 > 1e-6)
        cFlag2 = cFlag2 | 0020;
    else
        cFlag2 = cFlag2 | 0010;

    if (k3*fTestPX-fTestPY+b3 > 1e-6)
        cFlag2 = cFlag2 | 0002;
    else
        cFlag2 = cFlag2 | 0001;

    if (cFlag1 == cFlag2)
        ShowMessage("inside");
    else
        ShowMessage("outside");

}

如何判断一个点在三角形内部

如何判断一个点在三角形内部基本思路如图,点P在三角形ABC内部,可以通过以下三个条件判断: 点P和点C在直线AB同侧 点P和点B在直线AC同侧 点P和点A在直线BC同侧 如果以上三个条件同时满足,则点...
  • pdcxs007
  • pdcxs007
  • 2016年05月17日 15:31
  • 5581

Algorithm: 如何判断一个点是否在一个三角形内

昨日因为机缘巧合,做了一道阿里的实习生编程题。题目很有趣,其中涉及到了如何判断一个点是否在一个三角形内。 其中,判断这个问题最简单的方法是面积法。(图片来源:http://www.cnblo...
  • Firehotest
  • Firehotest
  • 2017年03月17日 08:07
  • 2671

python-判断某个坐标点是否在三角形内

主要用到的知识点: 在平面直角坐标系内,A(a,b),B(c,d),C(e,f)构成之三角形面积为    A,B,C三点最好按逆时针顺序从右上角开始取,因为这样取得出的结果一般都为正值,如果不...
  • mxw322
  • mxw322
  • 2017年02月20日 21:36
  • 1486

已知两线段的四点坐标,如何判断两线段是否相交的思路

说明TPoint和TLineSeg的定义了:)  struct TPoint {  float x,y;  };  //TPoint是指线段端点的坐标     struct TLineSe...
  • DirkNow
  • DirkNow
  • 2012年04月24日 17:15
  • 2727

已知三角形三顶点坐标,求三角形面积的表达式 找出求果园里的树的解决方案

已知直角坐标系3点p(a,b),m(c,d),n(e,f) 求三角形pmn面积 解: 无论三角形的顶点位置如何,△PMN总可以用一个直角梯形(或矩形)和两个直角三角形面积的和差来表示 而...
  • chenyiming_1990
  • chenyiming_1990
  • 2013年04月23日 11:33
  • 3903

已知三角形三点坐标,求三角形的面积(二维和三维)

先介绍一下三维中的两点之间距离之式,和二维的几乎一样:d = sqrt((x0-x1)^2 + (y0-y1)^2 + (z0-z1)^2) 再介绍叉乘,中心内容!叉乘在定义上有:两个向量进行叉乘得...
  • whucv
  • whucv
  • 2012年06月09日 11:39
  • 4486

nyoj815三角形(已知三角形的三边长或三顶点坐标求面积)&& nyoj68三点顺序(向量叉积)

题目信息                                                                             三角形             ...
  • Gengman
  • Gengman
  • 2016年10月09日 19:44
  • 650

已知三角形三点坐标, 求三角形的面积

已知三角形三点坐标, 求三角形的面积   发表时间:2004-8-10 作者:未知[获得此文档时候没有作者记录,深感抱歉,本文档全为转载] ...
  • u013654955
  • u013654955
  • 2014年04月15日 23:38
  • 792

已知一个矩阵 A(m*n) 的元素每行每列都按从小到大有序, 试设计一个算法判断任一给定值 k 是否在矩阵 A(m*n) 中

原题:已知一个矩阵 A(m*n) 的元素每行每列都按从小到大有序, 试设计一个算法判断任一给定值 k 是否在矩阵 A(m*n) 中, 如 k 在矩阵 A(m*n) 中, 则返回其所在行号和列号, 要求...
  • huanfengyun
  • huanfengyun
  • 2013年06月11日 09:30
  • 2326

python-判断某个坐标点是否在三角形内

主要用到的知识点: 在平面直角坐标系内,A(a,b),B(c,d),C(e,f)构成之三角形面积为    A,B,C三点最好按逆时针顺序从右上角开始取,因为这样取得出的结果一般都为正值,如果不...
  • mxw322
  • mxw322
  • 2017年02月20日 21:36
  • 1486
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:怎样判断一个坐标是否在已知三角形内?
举报原因:
原因补充:

(最多只允许输入30个字)