本文主要是介绍GIS入门,Java不使用任何第三方库实现射线穿越法计算某个点是否与多边形相交,比普通射线法提升了计算性能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
在上一章中《GIS入门,Java不使用任何第三方库实现判断一个经纬度点是否在多个经纬度点组成的多边形内,计算某个点是否与多边形相交》,我们使用了一个最简单的算法“射线法”来计算一个点到是否与多边形相交,但是对于多边形非常多的顶点时,计算就会力有不逮。
本章将在基础上优化计算性能,使用一个更高性能的算法:“射线穿越法”(Ray Crossing Algorithm)或射线投射法(Ray Casting Algorithm)来更快的计算某个点是否与多边形相交。
实现原理
除了上一章中提到的“射线法”之外,其实还有其他一些更快速的方法可以判断一个经纬度点是否在多边形内部(点与多边形是否相交)。其中,比较常见的方法是使用射线法的改进版本,也被称为射线穿越法(Ray Crossing Algorithm)或射线投射法(Ray Casting Algorithm)。
射线穿越法的主要思想是通过绘制一条水平线(或竖直线)从待判断点向外扩展,然后计算该水平线与多边形的边的交点数量。与射线法不同的是,射线穿越法不需要将射线绘制到无穷远处,而是只需在水平线上进行。这样可以大大减少计算量。
具体计算步骤如下:
-
遍历多边形的每一条边
这篇关于GIS入门,Java不使用任何第三方库实现射线穿越法计算某个点是否与多边形相交,比普通射线法提升了计算性能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!