——园里的树排列成矩阵。它们的x和y坐标均是1~99的整数。输入若干个三角形,依次统计每一个三角形内部和边界上共有多少棵果树。
如图所示:
样例输入
1.5 1.5 1.5 6.8 6.8 1.5
10.7 6.9 8.5 1.5 14.5 1.5
样例输出
15
17
分析:
此题用有向面积来解,首先看函数
double area(double x1, double y1, double x2, double y2, double x3, double y3)
{
return x1*y2 + x3*y1 + x2*y3 - x3*y2 - x1*y3 - x2*y1;
}
它给出三角形P1(x1,y1)- P2(x1,y1)- P3(x2,y2)的有向面积的两倍。如果△P1P2P3的三个顶点顺时针排列,那么有向面积为负;如果为逆时针排列,那么有向面积为正;3点共线时,有向面积为0。如果感觉比较难记,可以记它的行列式形式:
____|x1 y1 1|
2S= |x2 y2 1| = x1y2 + x3y1 + x2y3 - x3y2 - x1y3 - x2y1
___ |x3 y3 1|
有了它,判断就很简单了:假设输入三角形为ABC,待判断点为O,则O在三角形ABC内部或边界上,当且仅当S△ABC=S△OAB + S△OB