设点Q,线段P1P2,判断点Q是否在P1P2上。
1、判断条件
(1)(Q-P1)*(P1-P2)=0 //即三点共线。
(2)Q点的横纵坐标是否在P1和P2的横纵坐标范围之内。
2、代码实现
#include<stdio.h>
#include<algorithm>
using namespace std;
struct point
{
double x,y;
};
struct point q,p1,p2;
int judge()
{
if(((q.x-p1.x)*(p1.y-p2.y))==((p1.x-p2.x)*(q.y-p1.y))
&& (q.x>=min(p1.x,p2.x) && q.x<=max(p1.x,p2.x))
&& ((q.y>=min(p1.y,p2.y))&&(q.y<=max(p1.y,p2.y))))
return 1;
return 0;
}
int main()
{
scanf("%lf%lf",&p1.x,&p1.y);
scanf("%lf%lf",&p2.x,&p2.y);
scanf("%lf%lf",&q.x,&q.y);
if(judge())
printf("YES\n");
else
printf("NO\n");
return 0;
}
/*
1 0
4 0
3 0
Q点在线段P1P2内
*/
/*
1 0
4 0
5 0
Q点不在线段P1P2内
*/
/*
1 0
4 0
1 1
Q点不在线段P1P2内
*/
/*
0 0
0 0
0 0
Q点在线段P1P2内
*/
/*
0 0
0 0
1 0
Q点不在线段P1P2内
*/