判断点是否在三角形内部(xdoj 1125)

来源:互联网 发布:jre源码下载 编辑:程序博客网 时间:2024/05/18 12:29

先贴题目: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;}
0 0
原创粉丝点击