给 A B C 的坐标, D E F分别为三条边的三等分点,求P R Q三角形的面积。
直接求三点坐标就好了,算X积。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
struct point
{
double x,y;
point(){}
point(double a,double b):x(a),y(b){}
void read(){scanf("%lf%lf",&x,&y);}
};
typedef point vec;
vec operator - (point a,point b){ return vec(a.x-b.x,a.y-b.y);}
vec operator + (point a,point b){ return vec(a.x+b.x,a.y+b.y); }
vec operator * (vec a,double p){ return vec( a.x*p,a.y*p ); }
double cross(vec a,vec b){ return a.x*b.y - a.y*b.x;}
point A,B,C,D,F,E;
point P,Q,R;
point getpoint( point p,vec v,point q,vec w)
{
vec u = p-q;
double t = cross(w,u)/cross(v,w);
return p+v*t;
}
int main()
{
// freopen("in.txt","r",stdin);
int t;
cin>>t;
while(t--)
{
A.read(),B.read(),C.read();
D = B + (C - B) * (1.0 / 3.0);
F = A + (B - A) * (1.0 / 3.0);
E = C + (A - C) * (1.0 / 3.0);
P = getpoint(A,D-A,B,E-B);
Q = getpoint(B,E-B,C,F-C);
R = getpoint(C,F-C,A,D-A);
double area = fabs ( cross( R-P,Q-P) )/2.0;
printf("%.0lf\n",area);
}
return 0;
}