UVA 11437 || Triangle Fun

来源:互联网 发布:tcp ip网络编程 代码 编辑:程序博客网 时间:2024/06/07 05:11

给 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;}


0 0