題目:給定一個三角形的三個點,然後給出第三個點,判斷這個點是否在三角形內。
方法:求出三角形的面積,然後再求出測試點與三角形中每兩個點組成的三角形的面積,相加之後如果等於個頂的三角形的面積,那麼就是在三角形內,否則則不在。
注意:測試點出現在其中一條邊上也不算在三角形內,去除這種情況的方法就是測試點與其他點構成的三角形的面積不能為0。
代碼:
#include#include #include #include using namespace std; int solve(int a1,int b1,int a2,int b2,int a3,int b3) { int sum=0; sum+=a1*b2-a2*b1; sum+=a2*b3-a3*b2; sum+=a3*b1-a1*b3; return abs(sum); } int main() { int x[3],y[3],l,r; while(1) { for(int i=0;i<3;i++) cin>>x[i]>>y[i]; cin>>l>>r; if(x[0]==0&&x[1]==0&&x[2]==0&&y[0]==0&&y[1]==0&&y[2]==0&&l==0&&r==0) break; int s1=solve(x[0],y[0],x[1],y[1],x[2],y[2]); int s2=solve(x[0],y[0],x[1],y[1],l,r); int s3=solve(x[0],y[0],l,r,x[2],y[2]); int s4=solve(l,r,x[1],y[1],x[2],y[2]); if(s1==s2+s3+s4&&s2&&s3&&s4) cout<<"YES\n"; else cout<<"NO\n"; } return 0; }