首页 > 其他 > 详细

点是否在三角形内

时间:2015-05-10 09:53:08      阅读:256      评论:0      收藏:0      [点我收藏+]

技术分享题目描述:        

         如果在一个二维坐标系中,已知三角形三个点的坐标,那么对于坐标系中的任意一点,如何判断该点是否在三角形内(点在三角形边线上也认为在三角形内)?

        假设三角形的三个点的坐标为ABC(逆时针顺序),需要判断点D是否在该三角形内。

技术分享解法一

技术分享

代码如下:

struct point
{
double x, y;
};
double Area(point A, point B, point C)
{
//边长
double a, b, c = 0;
//计算出三角形边长,分别为a,b,c
Computer(A, B, C, a, b, c);
Double p = (a + b + c) / 2;
return sqrt((p - a)*(p - b)*(p - c)*p);//海伦公式
}
//如果D在三角形内,返回true,否则返回false
bool isInTriangle(point A, point B, point C, point D)
{
//Area(A,B,C)函数返回以A,B,C为顶点的三角形的面积
if (Area(A, B, D) + Area(B, C, D) + Area(C, A, D) > Area(A, B, C))
return false;
return true;
}

技术分享解法二

技术分享

技术分享

struct point
{
double x, y;
};
double Product(point A, point B, point C)
{
return (B.x - A.x)*(C.y - A.y) - (C.x - A.x)*(B.y - A.y);
}
//A,B,C在逆时针方向
//如果D在ABC之外,返回false,否则返回true
//注:此处依赖于A,B,C的位置关系,其位置不能调换
bool isInTriangle(point A, point B, point C, point D)
{
if (Product(A, B, D) >= 0 && Product(B, C, D) >= 0 && Product(C, A, D) >= 0)
return true;
return false;
}


点是否在三角形内

原文:http://blog.csdn.net/wangfengfan1/article/details/45604027

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!