假设菜园里面的果树是按照平面坐标系来排列的,坐标系的x,y都是一系列的整数,我们这里假设为1~10的整数。现在在这个平面系中输入任意三点(在10,10之内)组成一个三角形,求三角形所包围的树的个数(树就是坐标系的整数点)。
如果我们把这个问题简化一下,很明显就是在求一个点是在三角形内部还是在外部,所以我们可以采取遍历坐标系中的所有点,看这些点是在三角形的内部还是外部(包括在线上的点)
要求一个点是否在三角形内部,这就需要用到三角形的有向面积计算公式了。所谓三角形的有向面积计算公式,就是指:从第一点开始,用前一点横坐标减后一点横坐标与两坐标之和的乘积求梯形面积,直到完成多边性的封闭,得到三角形的有向面积。此时,如果求出的值是正的(S>0),则得出A->B->C为逆时针,否则为顺时针。
感觉这样很麻烦,还要求梯形的面积等,所以可以用一种更简单的方法来求三角形的有向面积。这里我们假设平面坐标系中的三点为:A(x1,y1) B(x2,y2) C(x3,y3),那么有向面积的公式就是(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2)/2。如果算出来这个数字是大于0,那么A,B,C三个点构成的三角形为逆时针的,否则为顺时针的。
这里我们假设A(3,5),B(4,1),C(1,1)来算下三角形的有向面积。根据上面的公式就有3+4+5-3-20-1=-12,再除以2得到-6。所以三角形的有向面积为-6,而且根据上面所说的正数与负数的关系,