空间分析作业——JAVA实现点面距离计算

空间分析作业——JAVA实现点面距离计算


又是被网课支配的一周呢。空间分析课程中遇到了一个作业,设计程序实现点面距离的计算,不限语言,我选择了JAVA,其实相差不大,Python也可以,有时间的话试着用Python实现一下。。

思路

数据结构

点面距离计算,那么这两类对象的组织方式应该如何表达?
对于空间数据来说分矢量数据和栅格数据,这里明显是属于矢量数据的,空间矢量数据具有多种几何属性,时空属性,且是海量的,但是这里并不需要显示一个面要素的具体属性,完全可以把他们抽象为简单数学问题(完全不用考虑空间参考系的)。
那么可以用最简单的方式:

  • 点要素就是一个简单的由坐标构建起来的类
  • 面要素则是由首尾相同的坐标串表示

我们在求最值距离时涉及到比较,需要遍历坐标串,并不需要删除与插入操作,因此选择了数组的方式来存储坐标串。

问题转化

这个程序目的是为了计算点面间距离,点面距离分三类:

  • 中心距离:点到面几何中心的距离
  • 最远距离:点到面最远的距离
  • 最近距离:点到面最近的距离

在这里插入图片描述
之前说到了点面的数据结构,几何中心可以通过计算得到其坐标,最值距离一定在边界的拐点处,那么问题就可以转化为两坐标间的距离。

代码

Point类

在这里插入图片描述
Point类设计了两个属性:x和y坐标;两个构造方法;一个静态方法计算两个坐标间距离。
在这里插入图片描述

Polygon类

在这里插入图片描述
Polygon类继承了Point类,设计了两个属性:Point类型的数组、起始点;两个构造函数;getCenter方法封装了计算面要素几何中心的算法;getCenterDistance方法,专门计算中心距离(后来在测试的时候发现是多余的,不过也是一种方式);getMaxDistance方法和getMiniDistance方法用来计算最值距离,涉及到遍历数组,考虑到面要素的坐标串具有意义,不可改变顺序,因而引入了距离数组进行比较和排序,详见注释;show方法将构成面要素的坐标串输出
在这里插入图片描述

主类测试

只设计了一个测试样例,个人觉得应该再多一些,不过没有再继续设计了。此外,测试最可观的应该是点和圆面之间的距离,但是圆面的坐标串可以想象是无法靠人工输入的,一是数量巨大,二是一个哲学问题——“任何人都画不出标准的圆”,对测试影响或许会比较大,所以我设计了一个比较简单的矩形情况。
在这里插入图片描述

测试结果

在这里插入图片描述
以上仅为个人的设计思路,不一定是最高效的,还请多指教

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值