叉积_判断点是否在线段上
//判断点是否在直线上 //如果在直线上,那么这个点和线段两端点构成的向量的叉积一定==0 //也就是两个向量共线(obviously) //那么如果坐标还在两端点之间的话就是在线段上了 #include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std; const int N=1e5+5; const double eps=1e-8; inline int read() { char c=getchar();int num=0; for(;!isdigit(c);c=getchar()); for(;isdigit(c);c=getchar()) num=num*10+c-'0'; return num; } struct Point { double x,y; Point(double x=0,double y=0) { this->x=x,this->y=y; } Point operator - (const Point &a) { return Point(this->x-a.x,this->y-a.y); } double operator * (const Point &a) { return this->x*a.y-this->y*a.x; } }Q,P1,P2; int main() { scanf("%lf%lf%lf%lf%lf%lf",&Q.x,&Q.y,&P1.x,&P1.y,&P2.x,&P2.y); if(fabs((Q-P1)*(Q-P2))<eps&&min(P1.x,P2.x)-eps<=Q.x&&max(P1.x,P2.x)+eps>=Q.x&&min(P1.y,P2.y)-eps<=Q.y&&max(P1.y,P2.y)+eps>=Q.y) puts("Yes"); else puts("No"); return 0; }