求算法,已知三维坐标文件,如下
C GRID BLOCK: I =   1 , J =   1 , K =   1  
 21564066.17   5004454.30      1252.53  21564138.51   5004454.30      1253.21 
 21564138.51   5004384.16      1253.03  21564066.17   5004384.16      1252.30 
 21564066.17   5004454.30      1255.03  21564138.51   5004454.30      1255.72 
 21564138.51   5004384.16      1255.53  21564066.17   5004384.16      1254.81 
C GRID BLOCK: I =   2 , J =   1 , K =   1  
 21564138.51   5004454.30      1253.21  21564210.85   5004454.30      1253.89 
 21564210.85   5004384.16      1253.76  21564138.51   5004384.16      1253.03 
 21564138.51   5004454.30      1255.72  21564210.85   5004454.30      1256.40 
 21564210.85   5004384.16      1256.26  21564138.51   5004384.16      1255.53 
C GRID BLOCK: I =   3 , J =   1 , K =   1  
 21564210.85   5004454.30      1253.89  21564283.19   5004454.30      1254.71 
 21564283.19   5004384.16      1254.55  21564210.85   5004384.16      1253.76 
 21564210.85   5004454.30      1256.40  21564283.19   5004454.30      1257.22 
 21564283.19   5004384.16      1257.06  21564210.85   5004384.16      1256.26 网格数据如上,所有的网格数据都是这种格式,一个网格有8个点,每个点三个数值,相邻的网格有四个点共有,我希望把每个网格的顶点用索引来表示,通过索引又可以去找到每个点的坐标值。
这样的话可以节约空间,即共有的顶点只需存贮一遍。请问大家有没有什么好的算法快速地找到共有点的索引?这样就不用遍历所有的点来比较是否是同一点了。

解决方案 »

  1.   

    C GRID BLOCK: I =   1 , J =   1 , K =   1  
    上面这行代表点的坐标,下面这些数据是不是对解决lz的问题没有作用呀?
     21564066.17   5004454.30      1252.53  21564138.51   5004454.30      1253.21 
     21564138.51   5004384.16      1253.03  21564066.17   5004384.16      1252.30 
     21564066.17   5004454.30      1255.03  21564138.51   5004454.30      1255.72 
     21564138.51   5004384.16      1255.53  21564066.17   5004384.16      1254.81 lz所说的“共有的顶点只需存贮一遍”是指在IJK三者都相等的时候只存储一次相关数据吗?还有一点lz说的不是很清楚,所谓的节省空间是节省存储在硬盘文件的空间还是节省读取到内存后的内存占用空间。
    从我的理解看,如果是需要节省硬盘空间,可以写一个算法,将所有旧格式的文件转换成新的格式,这种格式下所有节点的数据存储在文件头,相同的节点只储存一次,然后使用偏移量和偏移长度两个32位数字来表示一个节点
    如果是节省内存空间,思想也差不多。建立一个Node类,用来存储一个节点内容,使用一个三维数组,数组中每个元素都是一个指向Node类实例的引用。创建Node类实例前判断,在内容相同的时候不创建新的对象