判斷點是否在三角形內部(xdoj 1125)

先貼題目: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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章