解决方案 »

  1.   

    我还是那句话:无解。首先,他现在确实有扫描到了表面的坐标,但那不是表面的坐标方程(或方程组),而且这些只是无穷个表面坐标点的一部分(N再多还是一部分)。
    举个夸张点的例子,给你上下左右前后6个坐标(1,1,0),(1,0,1)(-1,1,0)....,你是按照正方体,还是球体还是圆柱体还是圆环的方法来算呢。但是,如果确保所有关键位置的坐标都已经被测得。同时,空间中某个点,是否位于这个物体内部,也能能够计算出来——这个是关键——可以通过近似的方式(类似积分)来模拟计算。将整个能测的空间测试成X*Y*Z个小正方体。每个正方体都很小。那么,你现在有X*Y*Z个中心点。然后拿每个中心点去和N个坐标比较。由于(假设)已经能判断所有点是否在物体内部,每次测试到一个中心点在物体内部,count++
    最后 count/X*Y*Z (浮点,非整除)就是物体的近似体积。不过,这个算法的最重要前提,是能够判断任何一个点,是否在物体内部。你现在只有N个点,基本上是不可能做到的,哪怕N=4000,复杂点的图形,就做不到。
      

  2.   

    我认为可以,至少可以近似求出,毕竟有4000多个点,当然你非要说在某两点之间有一个大坑,那这样抬杠就没意思了,就假设4000个点可以描绘出一个多面体,任意相临三点都组成一个平面。我觉得应该是个积分方向的想法。我知道JAVA的类库中有针对平面多边形的各种变态API,不知道3D类库中是否有相应的API。我不清楚楼主是专门做研究的,还是只是做项目。如果做研究,那你继续,如果只是项目上需要,千万不要自己写算法,你一定写不出来。恕我直言。因为我肯定写不出来。我之前写计算平面不规则图形的切割问题时就费了N多力气,我的经理跟我说一定不要自己写,去找类库,最后在JAVA的类库里果然有现成的实现。建议楼主看下JAVA有没有3D类库,其中有没有这方面的API,如果没有,拜访下类似于3D MAX这种专门做3D建模的公司,哪怕花些钱,跟他们交流一下,看他们有没有这方面的算法积累。最后提供一下搜索思路,我之前搜了很多关键词都没有搜到,后来无意中得知多边形的英文单词叫polygon,于是搜polygon时发现,JAVA中那个类的名字就叫Polygon。楼主不妨试试看多面体之类的英文单词,有没有对应的类。