p********y 发帖数: 111 | 1 就是将不规则物体表面用无数小三角形近似,然后便于计算面积
网上倒是找到一个近似的例子:http://www.heikman.de/index.html?/tools/java/triangulation.html
和我所想的方法类似,遵循:
* find all boundary points in the data set
* find all neighbouring boundary points for each boundary point
* find three neighbouring boundary points and assign them to a new
triangle.
不过这个java作者说了他的code有问题。
我所要应付的componenets是无规则的,唯一的信息就是这个component包含的所有点的
三维坐标,如果我自己用c来写,具体的思路大概如下:
把component包含的所有点用网格覆盖(把component装入稍大的网格盒子),含有点的
网格为实网格,如果某个实网格在一个小范围内所有邻居都是实网格,就把该 |
c*****t 发帖数: 1879 | 2 这个是有个 algorithm,基本上就是考虑种种 case,关键一点就是将 点(用
* 表示)放在 edge 上。这样的话,就可以弄出 128 个 case 在 cube 上出现
三个 * 的可能,然后通过 mirror / rotation 等将 case 缩减到 38 种
(好像是这些数字)。
+-*-+
| |
* |
| |
+---+
具体 link 俺早丢了。。。你想办法 google 吧。
componennt
【在 p********y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 就是将不规则物体表面用无数小三角形近似,然后便于计算面积 : 网上倒是找到一个近似的例子:http://www.heikman.de/index.html?/tools/java/triangulation.html : 和我所想的方法类似,遵循: : * find all boundary points in the data set : * find all neighbouring boundary points for each boundary point : * find three neighbouring boundary points and assign them to a new : triangle. : 不过这个java作者说了他的code有问题。 : 我所要应付的componenets是无规则的,唯一的信息就是这个component包含的所有点的 : 三维坐标,如果我自己用c来写,具体的思路大概如下:
|
l*********s 发帖数: 5409 | 3 I think knowing vertex coordinates is not enough to define a uniqiue object,
unless you assume that the object is convex everywhere. |
g*****g 发帖数: 34805 | 4 当顶点足够密集的时候应该不是问题。
object,
【在 l*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : I think knowing vertex coordinates is not enough to define a uniqiue object, : unless you assume that the object is convex everywhere.
|
c*****t 发帖数: 1879 | 5 One has to estimate the density of the points, and hence the cube I
mentioned in the algorithm. Otherwise, what can you do with a point
far out there?
【在 g*****g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 当顶点足够密集的时候应该不是问题。 : : object,
|
v******n 发帖数: 421 | 6 你说的是marching cube吧
【在 c*****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这个是有个 algorithm,基本上就是考虑种种 case,关键一点就是将 点(用 : * 表示)放在 edge 上。这样的话,就可以弄出 128 个 case 在 cube 上出现 : 三个 * 的可能,然后通过 mirror / rotation 等将 case 缩减到 38 种 : (好像是这些数字)。 : +-*-+ : | | : * | : | | : +---+ : 具体 link 俺早丢了。。。你想办法 google 吧。
|
c*****t 发帖数: 1879 | 7 en,俺当时一时没想起来名字。
【在 v******n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你说的是marching cube吧
|
a******u 发帖数: 1016 | 8 There is a free program called "gmsh" that I used before to do irregular
object meshing. It is pretty handy. I guess it can do 2-dimension too since
its meshing is based on tetrahedron. I can email it to you if you can not
find it online. |
p********y 发帖数: 111 | 9 谢谢回复,我找找。
有个vtk library 能搞Surface Triangulation,我正在想看这个library的source code
,看它是如何运算的,不过在网上叨咕半天没搞明白如何看它的source code。。。
【在 c*****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这个是有个 algorithm,基本上就是考虑种种 case,关键一点就是将 点(用 : * 表示)放在 edge 上。这样的话,就可以弄出 128 个 case 在 cube 上出现 : 三个 * 的可能,然后通过 mirror / rotation 等将 case 缩减到 38 种 : (好像是这些数字)。 : +-*-+ : | | : * | : | | : +---+ : 具体 link 俺早丢了。。。你想办法 google 吧。
|
p********y 发帖数: 111 | 10 http://www.geuz.org/gmsh/
我下了一个,安装一看,好像是个绘图软件,如何看source code?
since
【在 a******u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : There is a free program called "gmsh" that I used before to do irregular : object meshing. It is pretty handy. I guess it can do 2-dimension too since : its meshing is based on tetrahedron. I can email it to you if you can not : find it online.
|
|
|
a******u 发帖数: 1016 | 11 It is a finite element mesh generator. |
p********y 发帖数: 111 | 12 更新一下,在物体边界上的点已经被确定的情况下,如何绘出Triangulation?
【在 c*****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 这个是有个 algorithm,基本上就是考虑种种 case,关键一点就是将 点(用 : * 表示)放在 edge 上。这样的话,就可以弄出 128 个 case 在 cube 上出现 : 三个 * 的可能,然后通过 mirror / rotation 等将 case 缩减到 38 种 : (好像是这些数字)。 : +-*-+ : | | : * | : | | : +---+ : 具体 link 俺早丢了。。。你想办法 google 吧。
|
c*****t 发帖数: 1879 | 13 没明白你的意思。不过 marching cube 可以看
http://www.exaflop.org/docs/marchcubes/
【在 p********y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 更新一下,在物体边界上的点已经被确定的情况下,如何绘出Triangulation?
|
p********y 发帖数: 111 | 14 我的意思就是现在在边界上的点已经给出(不需要自己判定了),我所要作的就是纯粹
对这些表面上的点作Surface Triangulation来求面积
我在看这个链接,
另一个链接也蛮有用http://undergraduate.csse.uwa.edu.au/units/CITS4241/Project/references/Lorensen-Cline-brief.pdf
不过我还是没看懂。。
更不要谈如何用c写出程序来。。
有人来提供帮助嘛?有酬谢。
【在 c*****t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 没明白你的意思。不过 marching cube 可以看 : http://www.exaflop.org/docs/marchcubes/
|
p********y 发帖数: 111 | 15 请看图,现在如何把图1转成图2?
已知条件:图1上处在边界上的所有cube坐标我知道
【在 p********y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我的意思就是现在在边界上的点已经给出(不需要自己判定了),我所要作的就是纯粹 : 对这些表面上的点作Surface Triangulation来求面积 : 我在看这个链接, : 另一个链接也蛮有用http://undergraduate.csse.uwa.edu.au/units/CITS4241/Project/references/Lorensen-Cline-brief.pdf : 不过我还是没看懂。。 : 更不要谈如何用c写出程序来。。 : 有人来提供帮助嘛?有酬谢。
|
p*******n 发帖数: 4824 | 16 只有cube的信息吗?cube的定点没有值么? |
O*******d 发帖数: 20343 | 17 Use marching cube to create the surface, then calculate the surface area.
【在 p********y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我的意思就是现在在边界上的点已经给出(不需要自己判定了),我所要作的就是纯粹 : 对这些表面上的点作Surface Triangulation来求面积 : 我在看这个链接, : 另一个链接也蛮有用http://undergraduate.csse.uwa.edu.au/units/CITS4241/Project/references/Lorensen-Cline-brief.pdf : 不过我还是没看懂。。 : 更不要谈如何用c写出程序来。。 : 有人来提供帮助嘛?有酬谢。
|
s****x 发帖数: 43 | 18 Smooth the result from marching cubes to get the second picture. |
s***r 发帖数: 500 | 19
这个就是典型的isosurface rendering,或者叫volumn rendering, 在医学扫描成像上
很常用。。。
最简单的算法就是marching cube, 考虑一个8顶点的unit cube,根据物体与这个cube
切割的情况决定triangulation,如果一条边一个顶点在物体内,一个顶点在物体外,
那么在这个边上可以插值得出一个triangulation顶点。由于物体跟unit cube的切割只
可能有2^8 = 256种情形,可以做成一个查找表,这样对每个unit cube,根据顶点向量
,查表就能知道哪几条边需要插值找triangulation顶点。比如下面带的这个表。
很多现成的volumn rendering软件已经有这个功能,输入三维点阵数据,直接生成
triangle mesh。比如UCSF Chimera。自己写code也不难。
【在 p********y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 请看图,现在如何把图1转成图2? : 已知条件:图1上处在边界上的所有cube坐标我知道
|