- 问题描述
判断一个点是否在三角形内。
- 输入
- 输出
对于每一个询问的点,如果在三角形内输出一行Yes,不在三角形内输出一行No,共 qq 行。
- 输入样例
0.0 0.0
1.0 0.0
0.0 1.0
10
0.2 0.2
1.0 1.0
0.65 0.35
1.0 0.0
0.64 0.35
0.64 0.36
0.63 0.37
0.62 0.38
0.61 0.39
0.60 0.40
- 输出样例
Yes
No
No
No
Yes
No
No
No
No
No
问题提示
问题分析
**根据第一个和第二个提示可以判断出 如果对于三个方向 如三角形OAB 的有向面积和三角形OAC的y有向面积同号 则点C点B在直线的同侧 同理ABO 与 ABC 同号 BAO 与 BAC 同号 就可以确定C点在三角OAB内或者OAB上 一个条件不满足就不成立 **
#includeusing namespace std; int cmp(double a1,double a2,double b1,double b2){//判断有向面积的符号 return ((a1 * b2) - (a2 * b1) ) >= 0 ? 1 : 0; } int main(){ double a1,a2,a3,b1,b2,b3; scanf("%lf%lf",&a1,&b1); scanf("%lf%lf",&a2,&b2); scanf("%lf%lf",&a3,&b3); int n; cin>>n; for(int i = 0;i < n;i++){ double a,b; scanf("%lf%lf",&a,&b);//后面的相减是为了将首点移动到原点 if(cmp(a2 - a1,a3 - a1,b2 - b1,b3 - b1) == cmp(a2 - a1,a - a1,b2 - b1,b - b1) &&cmp(a3 - a2,a1 - a2,b3 - b2,b1 - b2) == cmp(a3 - a2,a - a2,b3 - b2,b - b2) &&cmp(a1 - a3,a2 - a3,b1 - b3,b2 - b3) == cmp(a1 - a3,a - a3,b1 - b3,b - b3) ){ cout<<"Yes"< cout<<"No"<



