1. 程式人生 > >(計算幾何)判斷一個點是否線上段上

(計算幾何)判斷一個點是否線上段上

累加器傳送門:

這個問題需要用到向量的叉積性質,下面先從百度截一些語句來介紹一下

用向量的叉積來判斷一個點是否線上段上

回到我們要乾的事情,如果叉積為零,可以證明一個點線上段所在的直線上,那麼怎麼證明線上段上呢?只需要讓該點位於線段在座標系中圍成的長方形中就行了,如圖所示
這裡寫圖片描述

所以大家知道該怎麼判斷了吧

然後上程式碼

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

using namespace std;

const double eps=1e-10
; struct Point{ double x,y; }Q,P1,P2; typedef Point P; P operator - (P a,P b){ P p; p.x=a.x-b.x; p.y=a.y-b.y; return p; } double operator *(P a,P b){ return a.x*b.y-b.x*a.y; } 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){ if(min(P1.x,P2.x)-eps<=Q.x&&Q.x-eps<=max(P1.x,P2.x)){ if(min(P1.y,P2.y)-eps<=Q.y&&Q.y-eps<=max(P1.y,P2.y)){ printf("YES\n"); return 0; } } } printf("NO\n"
); return 0; }