网上抄的 记录一下
public bool pInQuadrangle(PointF a, PointF b, PointF c, PointF d, PointF p)
{
double dTriangle = triangleArea(a, b, p) + triangleArea(b, c, p) + triangleArea(c, d, p) + triangleArea(d, a, p);
double dQuadrangle = triangleArea(a, b, c) + triangleArea(c, d, a);// s5 + s6;
if(Math.Abs(dTriangle - dQuadrangle)<1) //说明理论上应该是相等的,但因为计算本身的原因可能会有细微不同,所以选择小于1,根据实际情况来设置
{
return true;
}
else
{
return false;
}
}
double dis(PointF p1, PointF p2)
{
return Math.Sqrt((p1.X - p2.X) * (p1.X - p2.X) + (p1.Y - p2.Y) * (p1.Y - p2.Y));
}
//计算三角形面积
double triangleArea(PointF p1, PointF p2, PointF p3)
{
double a = dis(p1, p2);
double b = dis(p2, p3);
double c = dis(p3, p1);
double p = (a + b + c) * 0.5;
return Math.Sqrt(p * (p - a) * (p - b) * (p - c));
}