果园里的树排列成矩阵。他们的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
解这道题的时候用的是三角形的三个顶点与在三角形内部的任意一点相连形成的三个三角形的面积等于原三角形的面积,而外部点形成的三角形面积大于原三角形的面积;还有一个点就是三个点的行列式等于三角形有向面积的两倍。
代码如下:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
using namespace std;
class Angle
{
public:
double x0, y0;
double x1, y1;
double x2, y2;
friend istream & operator>>(istream & is, Angle &c);
};
istream & operator >>(istream & is, Angle &c)
{
is >> c.x0 >> c.y0 >> c.x1 >> c.y1 >> c.x2 >> c.y2;
return is;
}
double area(double x0,double y0,double x1,double y1,double x2,double y2)
{
return abs(x0*y1 + x2*y0 + x1*y2 - x2*y1 - x0*y2 - x1*y0);
}
int a[100][100];
int main()
{
Angle T;
memset(a, 0, sizeof(a));
int i, j;
while (cin >> T)
{
int count = 0;
for (i = 0; i < 100; i++)
{
for (j = 0; j < 100; j++)
{
if (fabs(area(T.x0, T.y0, T.x1, T.y1, T.x2, T.y2) - area(T.x0, T.y0, T.x1, T.y1, i, j) - area(T.x0, T.y0, T.x2, T.y2, i, j) - area(T.x1, T.y1, T.x2, T.y2, i, j)) <= 1e-9)
count++;
}
}
cout << count << endl;
}
return 0;
}