http://uva.onlinejudge.org/index.php option=com_onlinejudge&Itemid=8&page=show_problem&problem=2432
题目大意:
如图,定义三角形ABC,在BC,CA,AB上分别取边D,E,F,使得CD=2BD,AE=2CE,BF=2AF,求三角形PQR的面积。

思路:< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+z8jH87P2RCxFLEbI/bXj1/ix6qOsyLu688fzs/ZQUVLI/bXj1/ix6qOs1+6687bUcHIscHG9+NDQsuazy6Osy/m1w7XE0ruw47y0zqq08LC4oaM8L3A+CjxwPjxicj4KPC9wPgo8cD48cHJlIGNsYXNzPQ=="brush:java;">#include
#include
#include
using namespace std; const int MAXN=300+10; struct Point { double x, y; Point(double x=0, double y=0):x(x),y(y) { } }; typedef Point Vector; Vector operator + (const Vector& A, const Vector& B) { return Vector(A.x+B.x, A.y+B.y); } Vector operator - (const Point& A, const Point& B) { return Vector(A.x-B.x, A.y-B.y); } Vector operator * (const Vector& A, double p) { return Vector(A.x*p, A.y*p); } Vector operator / (const Vector& A, double p) { return Vector(A.x/p, A.y/p); } double Cross(const Vector& A, const Vector& B) { return A.x*B.y - A.y*B.x; } //两直线交点,参数式。 Point GetLineIntersection(const Point& P, const Vector& v, const Point& Q, const Vector& w) { Vector u = P-Q; double t = Cross(w, u) / Cross(v, w); return P+v*t; } Point a,b,c; int main() { int T; scanf("%d",&T); while(T--) { scanf("%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y); Vector BD=(c-b)/3; Vector AF=(b-a)/3; Vector CE=(a-c)/3; Point d=b+BD; Point f=a+AF; Point e=c+CE; Point p=GetLineIntersection(d,a-d,b,b-e); Point q=GetLineIntersection(c,c-f,b,b-e); Point r=GetLineIntersection(c,c-f,d,a-d); printf("%.0lf\n",Cross(p-q,p-r)/2); } return 0; }