• 判断点是否在线段上


    给定点 (Q,P_1,P_2),问点 (Q) 是否在线段 (P_1P_2) 上。

    首先运用矢量的叉积可以很方便地判断点是否在给定线段的直线上:若 (Q) 在直线 (P_1P_2) 上,则 (overrightarrow{P_1Q} imes overrightarrow{P_1P_2}=0)

    然后我们只需要保证点 (Q) 在以 (P_1P_2) 为对角线的矩形里就可以了。

    代码:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    
    using namespace std;
    
    const double eps=1e-10;
    struct Point
    {
    	double x,y;
    	
    	Point (double X,double Y) : x(X),y(Y) {}
    	Point () {}
    	void read() { scanf("%lf %lf",&x,&y); }
    	Point operator - (const Point a) const { return Point(x-a.x,y-a.y); }
    	double operator * (const Point a) const { return x*a.y-y*a.x; }
    }Q,P1,P2;
    
    int main()
    {
    	Q.read(),P1.read(),P2.read();
    	double MinX=min(P1.x,P2.x),MaxX=max(P1.x,P2.x),MinY=min(P1.y,P2.y),MaxY=max(P1.y,P2.y);
    	if(fabs((Q-P1)*(P2-P1))<eps&&Q.x+eps>=MinX&&Q.x<=MaxX+eps&&Q.y+eps>=MinY&&Q.y<=MaxY+eps)
    		puts("YES");
    	else
    		puts("NO");
    	return 0;
    }
    
    由于博主比较菜,所以有很多东西待学习,大部分文章会持续更新,另外如果有出错或者不周之处,欢迎大家在评论中指出!
  • 相关阅读:
    项目开发基础概念
    django 对接elasticsearch实现全文检索
    win10安装docker
    Mac VMware Fusion 中修改 centos7 虚拟机的磁盘空间、扩容
    CentOS 7下 YUM 本地仓库的搭建
    mac与虚拟机传输文件
    mac和windows快速锁定电脑
    rpm -qa详解
    虚拟机安装centos6
    mac与iPhone互传文件
  • 原文地址:https://www.cnblogs.com/With-penguin/p/13198589.html
Copyright © 2020-2023  润新知