GIS基本算法01-判断点是否在线段上

本文介绍了GIS空间判断中一个常见问题——如何判断一个点是否在线段上。通过解析几何的向量叉积和点在对角线矩阵区域内的条件,给出判断点是否在线段p1p2上的算法原理,并提供了Java核心代码实现,详细代码可在github获取。
摘要由CSDN通过智能技术生成

从今天开始我将不定期更新一些关于GIS的基础算法,主要是我自己个人学习的部分算法的原理介绍和算法代码。

*1.算法原理介绍

点到是否在直线段上,是GIS空间判断的常见问题。点是否在直线段上与点是否在直线上还有一定的差异。对于给定的三点Q 、p1、p2,p1 p2两点构成直线段,分别为该直线段的两个端点。而Q为待判定的是否在直线段p1p2上的点。

利用数学的解析几何的知识,我们利用向量的方式进行判断,首先,对于判断点是否在线段p1p2所在的直线段所在的直线上。利用向量的叉积来进行判断,若(p1-Q)✖(p2-p2) = 0,(说明两条线段平行,又共点,故)则说明点Q已经在直线段p1p2所在的直线上,但是还不能确定是否是在直线段p1p2上,因为可能在p1p2两侧的延长线上,其次,我们需要进行第二次的判别来确定点是否是在p1p2之间,这个时候我们利用判断Q是否在以p1p2为对顶点构成的对角点矩阵所在的区域内来判断点Q是否在p1p2之间的线段上。

其判断方法是看Q点的横纵坐标是否都在p1p2对应的xy的最小到最大的区域范围内。
在这里插入图片描述

2.算法代码实现*

package algo;

/**
 * @ClassName PointOnLine
 * @Description 判断点是否在线上
 * @Author luokai
 * @CreateDate 2020/8/15 22:51
 * @UPpdateUser luokai
 * @UpdateDate 2020/8/15 22:51
 * @UpdateRemark
 * @Version 1.0
 * Copyright (c) 2019,
 * All rights reserved.
 **/

/**
 * 算法原理介绍
 * 判断一个点是否在一条线上,其原理是利用叉积乘。a×b=|x1, y1|=x1y2-x2y1
 *                                                |x2, y2|
 * 例如点Q是否在线段p1和P2上  (Q-p1)✖(p2-p1) = 0
 * 除此之外,还要保证该点在点p1  p2所连成的对角矩阵的内部  因为第一个条件满足的情况下  可能是p1p2的延长线上
 *
 *
 */

import entity.Point;

public class PointOnLine {
   

    public boolean PointOnLine(Point p1, Point p2, Point q ){
   
        boolean flag = false;     // true   点在线上    false   点不在线上

        if(((q.getLon()-p1.getLon()) * (p2.getLat()-p1.getLat()) -<
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值