java坐标数组_怎么把坐标值保存到⼀维数组⾥
题⽬不是很完整。我理解是⽐如说把n个(⼆维)坐标值,保存到长为n的⼀维数组⾥,数组⾥每个元素对应⼀个坐标?
取巧的⽅法,因为你没说⼀维数组是什么类型的,⽐如你定义⼀个Coordinate类,⾥⾯存储坐标值:class Coordinate{
public int x;
public int y;
}
那你的⼀维数组就存储这个Coordinate类Coordinate[] array
如果你的数组要求是个int类型的,这看起来像是关系到可计算理论,可数和等势的问题了。说⽩了就是让⼆维(假设你是⼆维坐标值)数和⾃然数建⽴⼀⼀映射的关系。看起来像是个算法题,记得以前见过这种类似的⾯试题。
要求是⾸先你的坐标值不可以是实数,因为实数本⾝不可数,更别提⼆维实数了。
假设你的坐标也全是int类型。那么问题转化为如何建⽴⼀对 和 ⼀个int 的⼀⼀对应的关系。如果你学过有理数和⾃然数是如何⼀⼀对应的,应该可以解答,因为有理数可以看做两个⾃然数的商。详细可以看这个帖⼦有理数集与⾃然数集等势。假设坐标值⾮负,那么可以⽤三⾓形数法,按照组零:(0,0) 组⼀(0,1) (1,0) 组⼆(0,2) (1,1) (2,0) 组三(0,3) (1,2) (2,1) (3,0)这样⼀路数下来。每⼀组的横纵坐标相加等于组号,⽽第k组有k+1个坐标。
java定义一维数组并赋值⽐如给你个坐标(m,n),先它对应的组是m+n。在它之前的组总共有(m+n+1)*(m+n)/2个坐标了,再加上(m,n)是这⼀组的第m+1个坐标(或者叫偏移量),所以(m,n)是第(m+n+1)*(m+n)/2+m+1个坐标,你如果喜欢从零开始计数,就是(m+n+1)*(m+n)/2+m。于是成功将(m,n)映射成为了⼀个⾃然数。举例(3,4)对应的⾃然数就是31,把它作为相应的⼀维int数组元素。
输⼊(0,0), (1,2), (3,4)
输出array={0,7,31}
⽽从⾃然数解码出⼆维数组,就把上⾯的过程反过来。
如果考虑负数,⽐较⽅便的⽐如⽤菱形数法,|x|+|y|=k作为第k组,该组有4k个元素,然后从(0,k)开始顺时针计算偏移量。不赘述了。
把⼆维坐标扩展到任意有限维有理数都是可以的,因为都是可数的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论