点是否在三角形内

微笑题目描述:        

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

        假设三角形的三个点的坐标为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;
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值