先貼題目:xdoj1125
思路:給了三角形的三個頂點a,b,c,和一個點x;
判斷abc的面積 是否= xab的面積+xbc的面積+xac的面積;
思路很簡單。。。關鍵在於怎麼求三角形面積。
一開始我的方法是:割補法,所求面積=矩形面積-三個直角三角形的面積。
然而我還是太天真。。。。在wa的我快哭了的時候,終於發現,這個方法解決不了鈍角三角形啊啊啊啊啊啊啊~~!!
於是乎,親愛的同志們,還是老老實實的用海倫公式吧。。。
上代碼:
#include <bits/stdc++.h>
using namespace std;
double area(double x1,double y1,double x2,double y2,double x3,double y3)
{
double a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)),b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)),c=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
return sqrt((a+b+c)*(a+b-c)*(a+c-b)*(b+c-a))/4.0;
}
int main()
{
double x,y,x1,y1,x2,y2,x3,y3;
while (scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3,&x,&y)!=EOF)
{
if (abs(area(x, y, x1, y1, x2, y2)+area(x, y, x1, y1, x3, y3)+area(x, y, x2, y2, x3, y3)-area(x1, y1, x2, y2, x3, y3))<0.001)
{
printf("Orz\n");
}
else printf("stO\n");
}
return 0;
}