您的位置:首页 > 其它

UVA 11437 || Triangle Fun

2015-02-08 15:01 344 查看


给 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: