1. 程式人生 > >內心裡的一把火(計算幾何(海倫公式))

內心裡的一把火(計算幾何(海倫公式))

連結:https://ac.nowcoder.com/acm/contest/289/D
來源:牛客網
 

時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld

題目描述

 

 

小明在上學的路上,看到了小花,小花也看見了他,兩個人深情的對視了一下,然後小花就對小明說:你愛過我嗎?小明說:愛過。小花就對小明說,那你能幫我做一個題目嗎?如果你能做對的話,就證明你愛過我。小明自信的回答好啊。小花說,給你三個人的座標,以及小花的座標,她想知道她是不是處在他們三個人的範圍之內。小明頓時慌了,早知道我就不說了,他趕緊找到了acmer來幫他解決了。

image.png

 

輸入描述:

多組輸入,輸入A,B,C的座標(x1,y1,x2,y2,x3,y3),以及小花的座標(x,y)。(範圍都是在0到100之內的整數)

輸出描述:

是的話就輸出YES,否則輸出NO

示例1

輸入

複製

0 0 3 0 0 4
1 1

輸出

複製

YES

如果在三角形的內部,三個的面積一定等於大的,在外面的話一定大於大的面積,因為精度的原因,YES的範圍是小於等於大的面積

程式碼:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>

using namespace std;

int main()
{
	int x1,y1,x2,y2,x3,y3;
	int x,y;
	while(scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3)!=EOF)
	{
		cin>>x>>y;
		double a=sqrt(pow(x1-x2,2)+pow(y1-y2,2)); 
	    double b=sqrt(pow(x3-x2,2)+pow(y3-y2,2));
	    double c=sqrt(pow(x1-x3,2)+pow(y1-y3,2));
	    double p=(a+b+c)/2;
	    double a1=sqrt(pow(x1-x,2)+pow(y1-y,2));
	    double b1=sqrt(pow(x2-x,2)+pow(y2-y,2));
	    double c1=sqrt(pow(x3-x,2)+pow(y3-y,2));
//	    cout<<a1<<" "<<b1<<" "<<c1<<endl;
	    
	    double p1=(a+a1+b1)/2;
	    double p2=(b+b1+c1)/2;
	    double p3=(c+a1+c1)/2;
	    double SABC=sqrt(p*(p-a)*(p-b)*(p-c));
	    double SABP=sqrt(p1*(p1-a)*(p1-a1)*(p1-b1));
	    double SBPC=sqrt(p2*(p2-b)*(p2-b1)*(p2-c1));
	    double SAPC=sqrt(p3*(p3-c)*(p3-a1)*(p3-c1));
	   
	    long long int S1=SABC*1000000;
	    long long int S2=SABP*1000000;
	    long long int S3=SBPC*1000000;
	    long long int S4=SAPC*1000000;
	    //cout<<S1<<" "<<S2<<" "<<S3<<" "<<S4<<endl;
	    if(S1>=S2+S3+S4)
	    {
	    	cout<<"YES"<<endl;
		}
		else
		{
			cout<<"NO"<<endl;
		}
    }
	return 0;
}