三角网格建模的问题,请高手指点我吧

CD2006 2006-04-19 09:51:49
三角网格(triangluar mesh)建模时,数据点数量非常巨大,常常几万甚至十几万数据点,而且考虑到后续操作,显然点要保存在数组中,便于索引,那么这样的数组怎么建立?用动态开辟?但是事先并不确定数据量,不要告诉我melloc和realloc,哈哈!谢谢了!
...全文
237 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzwu 2006-04-19
  • 打赏
  • 举报
回复
当然要动态开辟了!

我以前碰到过类似情况:保存分子图形数据:

分子大小相差悬殊,小的只有几个原子,大的(如蛋白质分子)有成千上万个原子.

我用的办法是根据分子大小来动态开辟不同数目的动态数组,但每一个大小是固定的.



CD2006 2006-04-19
  • 打赏
  • 举报
回复
呵呵,我说不要告诉我melloc和realloc,是说这种方法我也知道的,但觉得不妥,或是不规范,并不是说他们不要用到,现在刚刚转入OpenGL疯狂编程,现在首先的一个任务,就是让三角网格的3D图形显出来啊,我现在编程突然卡壳,竟然不知该怎么对付这些大数据量的点了,晕,谢谢高手指点了
CD2006 2006-04-19
  • 打赏
  • 举报
回复
我想请教:在这样大量数据读入时,该怎么做,因为数据点的数目不确定,所以malloc开辟空间时的数目不好确定,我现在的想法是用malloc先划出很大一个数组,比如10^6,然后读入点坐标,如果点的数目超过10^6,就用realloc再从新分配,但感觉这样效率很低,我的师兄用VC里面的CArray,不需要动态分配,反正每次往里面加入新的点就行了,最后还可以向数组一样索引,真是这样吗?
寻开心 2006-04-19
  • 打赏
  • 举报
回复
看不明白你的具体需求是什么,不知道如何回答。

另外,malloc和realloc可以避免吗?
他们可是底层分配动态内存的基础啊,只要用动态内存就少不了他们

CD2006 2006-04-19
  • 打赏
  • 举报
回复
呵呵,吃个饭终于想明白了,首先谢谢:happy__888([顾问团]寻开心),zzwu(未名) ( ),你们的思路很好,怪我自己迟钝了,哈哈,两年后再回论坛发帖,感觉真不错,今天算从新开张了
其次,感谢楼上其他各位,你们的想法也给我很大的启发,好的,今日帖今日结!
CD2006 2006-04-19
  • 打赏
  • 举报
回复
hoho,happy__888([顾问团]寻开心)牛了萨
方法很简洁,值得考虑,只是个人认为,对下标的频繁索引,将占据客观的开销的,呵呵
寻开心 2006-04-19
  • 打赏
  • 举报
回复
就是用数据结构当中桶来管理吧

每次分配一个固定大小的内存,比如1M个小
不够了不是重新分配,而是再次分配一个1M大小的
把这些内存地址用一个list管理起来不就得了

自己封装一个类,重载它的[] 操作就可以了
把对第i个元素的访问,转向到list当中i/1M个单元的 i%M地址的内容了

CD2006 2006-04-19
  • 打赏
  • 举报
回复
哈哈,谢谢楼上各路豪杰
我在上文中提到的CArray就是MFC的一个自动增长的数据结构,在windows下面跑起来没问题,但要想实现跨平台就不能用它了,呵呵,OpenGL_VC()用STL是个好方法啊,虚心学习学习!另外我再请问一下:zzwu(未名),你曾说到:“根据分子大小来动态开辟不同数目的动态数组,但每一个大小是固定的”,后半句:每一个大小固定怎么理解?
xzhunter 2006-04-19
  • 打赏
  • 举报
回复
很多语言都提供自动增长的数据结构,例如C#中的ArrayList,Java里也有。

基本原理是一开始建立一个初始值大小(16等等)的存储空间,

如果不够用了,那么建立一个2倍大的空间,把原来的数据复制到新空间。

再不够,就再扩大,复制。

=============================

ps:十几万数据点很多吗?我经常操作百万个数据对象。
OpenGL_VC 2006-04-19
  • 打赏
  • 举报
回复
不用自已写吧,网上用来读取3DS文件的源码有一堆。
如果真的要自已写,最好是用STL 的vector<>
它能自动分配空间,方便多了。
三维建模小软件使用说明 1. 本小程序为测试软件,模块较为单一,且有些参数不可设置。 2. 本小程序可以将带有标高的等高线生成DAT数据格式,且具有过滤功能。 3. CAD等高线文件应另存为DXF文件,且等高线上应具有标高。 4. 本小程序采用加权距离平方法进行三维插值,应该还有些小问题。本想加入最小二乘法,克里格法等插值算法,但时间有限,且算法核心部分无法用VB完成。希望有高手指点一二。 5. DXF文件名必须为shuru.dxf,为其他名字该软件将出现错误,不能执行。 6. 可以直接将数据文件导入,数据文件应与该小程序放在同一目录下,且数据应该采用逗号”,”或空格分隔。将来本小程序可以支持南方CASS格式的数据文件。且数据文件名必须为shuju.dat,否则程序将出现错误。 7. 等高线文件或数据文件不宜过大,如果超过1M,程序运行速度将很慢。且网格数将影响程序运行速度。经测试,一个20多M文件将运行半小时以上,以致电脑死机。数据文件最好不 要超过1M。 8. 本小程序可以生成surfer的网格文件,FLAC3D文件,及ansys支持文件。预留模块可以生成obj、stl等曲面文件。还可生成cass支持的三角网文件。 9. 经测试生成的FLAC3D文件可生成多层,ansys只能生成一层。 10. 软件运行界面如下,行数及列数最好不要超过60行,否则运行速度将很慢。正在研究变搜索步数法,以加快运行速度。

4,446

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧