全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3706
推到 Plurk!
推到 Facebook!

大家有用過Delaunay三角化這個方法嗎?

缺席
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-10-31 00:51:59 IP:59.115.xxx.xxx 訂閱
最近在研究Delauany這個方法,是一般2d轉3d的方法,
想找一個bcb的範例程式,請問有大大用過嗎?
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-11-05 09:07:15 IP:61.70.xxx.xxx 訂閱
你可以查詢Delaunay或是Vornoni。
http://www.csit.fsu.edu/~burkardt/cpp_src/cpp_src.html
上面的網頁有範例,但是他似乎是一個project,我不怎麼會改....
我之前是用一個O(n^4)的方法寫出來的,在一本計算幾何的課本中有寫....
如果node數目太多不會太慢.....
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-11-06 00:17:26 IP:59.115.xxx.xxx 訂閱
請問是哪一本計算機圖學的書啊?
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-11-06 08:30:50 IP:140.118.xxx.xxx 訂閱
不是計算機圖學喔,是計算幾何...
Computational Geometry in C 2nd

===================引 用 文 章===================
請問是哪一本計算機圖學的書啊?
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-11-07 00:10:35 IP:59.115.xxx.xxx 訂閱
謝謝~~我會找找看這本書看看,關於delaunay三角化我已經在網路上看了很多的範例了,
還在研究程式的內容中…
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-11-17 15:07:12 IP:61.216.xxx.xxx 訂閱
請問你那時候也是用BCB寫的嗎?
還有留下那個範例程式,可以借我參考一下嗎?
我試寫了,但是bug很多,唉~
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-11-17 17:24:51 IP:140.118.xxx.xxx 訂閱
以下是我的source code,因為是我的project,所以我沒辦法公佈所有的code,這是主要做三角化的部份,我是照書上的內容抄的,只做了一些改變

int i,j,k,m;
double xn,yn,zn;
int flag;
triangle_no=0;
//透過Delaunay Triangulation,求出三角形個數
int i_count=0;
dx[0]=point[vertex].coordinate_x;
dy[0]=point[vertex].coordinate_y;
dz[0]=dx[0]*dx[0] dy[0]*dy[0];
for(i=0;i {
dx[i_count 1]=point[vertex].Neighbor[i_count].coordinate_x;
dy[i_count 1]=point[vertex].Neighbor[i_count].coordinate_y;
dz[i_count 1]=dx[i_count 1]*dx[i_count 1] dy[i_count 1]*dy[i_count 1];
i_count ;
}
for (i = 0; i for (j = i 1; j < neighbor_number; j )
for (k = i 1; k < neighbor_number; k )
{
if(j!=k)
{
xn=(dy[j]-dy[i])*(dz[k]-dz[i]) - (dy[k]-dy[i])*(dz[j]-dz[i]);
yn=(dx[k]-dx[i])*(dz[j]-dz[i]) - (dx[j]-dx[i])*(dz[k]-dz[i]);
zn=(dx[j]-dx[i])*(dy[k]-dy[i]) - (dx[k]-dx[i])*(dy[j]-dy[i]);
if(flag =(zn<0))
for (m = 0; m < neighbor_number; m )
flag=flag&&
( (dx[m]-dx[i])*xn
(dy[m]-dy[i])*yn
(dz[m]-dz[i])*zn <=0);
if(flag)
{
triangle_no ;
}
}
}
int counter=0;//目前三角形
//求出Delaunay Triangulation
int find_vertex=0;
for (i = 0; i for (j = i 1; j < neighbor_number; j )
for (k = i 1; k < neighbor_number; k )
{
if(j!=k)
{
xn=(dy[j]-dy[i])*(dz[k]-dz[i]) - (dy[k]-dy[i])*(dz[j]-dz[i]);
yn=(dx[k]-dx[i])*(dz[j]-dz[i]) - (dx[j]-dx[i])*(dz[k]-dz[i]);
zn=(dx[j]-dx[i])*(dy[k]-dy[i]) - (dx[k]-dx[i])*(dy[j]-dy[i]);
if(flag =(zn<0))
for (m = 0; m < neighbor_number; m )
flag=flag&&
( (dx[m]-dx[i])*xn
(dy[m]-dy[i])*yn
(dz[m]-dz[i])*zn <=0);
if(flag)
{
AnsiString voronoi_center="v" IntToStr(vertex);
if(i==0)
{
StringGrid1->Cells[0][counter]=voronoi_center;
StringGrid1->Cells[1][counter]=point[point[vertex].Neighbor[j].vertex_ID.SubString(2,point[vertex].Neighbor[j].vertex_ID.Length()-1).ToInt()].vertex_ID;
StringGrid1->Cells[2][counter]=point[point[vertex].Neighbor[k].vertex_ID.SubString(2,point[vertex].Neighbor[k].vertex_ID.Length()-1).ToInt()].vertex_ID;
V_Memo->Lines->Add("v" IntToStr(vertex) " "
StringGrid1->Cells[0][counter] " "
StringGrid1->Cells[1][counter] " "
StringGrid1->Cells[2][counter]);

}
if(j==0)
{
StringGrid1->Cells[0][counter]=point[point[vertex].Neighbor[i].vertex_ID.SubString(2,point[vertex].Neighbor[i].vertex_ID.Length()-1).ToInt()].vertex_ID;
StringGrid1->Cells[1][counter]=voronoi_center;
StringGrid1->Cells[2][counter]=point[point[vertex].Neighbor[k].vertex_ID.SubString(2,point[vertex].Neighbor[k].vertex_ID.Length()-1).ToInt()].vertex_ID;
V_Memo->Lines->Add("v" IntToStr(vertex) " "
StringGrid1->Cells[0][counter] " "
StringGrid1->Cells[1][counter] " "
StringGrid1->Cells[2][counter]);
}
if(k==0)
{
StringGrid1->Cells[0][counter]=point[point[vertex].Neighbor[i].vertex_ID.SubString(2,point[vertex].Neighbor[i].vertex_ID.Length()-1).ToInt()].vertex_ID;
StringGrid1->Cells[1][counter]=point[point[vertex].Neighbor[j].vertex_ID.SubString(2,point[vertex].Neighbor[j].vertex_ID.Length()-1).ToInt()].vertex_ID;
StringGrid1->Cells[2][counter]=voronoi_center;
V_Memo->Lines->Add("v" IntToStr(vertex) " "
StringGrid1->Cells[0][counter] " "
StringGrid1->Cells[1][counter] " "
StringGrid1->Cells[2][counter]);
}
if( (StringGrid1->Cells[0][counter]==voronoi_center))
{
StringGrid2->Cells[0][find_vertex]=StringGrid1->Cells[1][counter];
find_vertex ;
StringGrid2->Cells[0][find_vertex]=StringGrid1->Cells[2][counter];
find_vertex ;
}
if( (StringGrid1->Cells[1][counter]==voronoi_center))
{
StringGrid2->Cells[0][find_vertex]=StringGrid1->Cells[0][counter];
find_vertex ;
StringGrid2->Cells[0][find_vertex]=StringGrid1->Cells[2][counter];
find_vertex ;
}
if( (StringGrid1->Cells[2][counter]==voronoi_center))
{
StringGrid2->Cells[0][find_vertex]=StringGrid1->Cells[0][counter];
find_vertex ;
StringGrid2->Cells[0][find_vertex]=StringGrid1->Cells[1][counter];
find_vertex ;
}
counter ;
}

}
}

Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-11-18 14:17:03 IP:59.117.xxx.xxx 訂閱
謝謝~~我研究一下,有問題再問你嚕~謝謝
Teresa_Chang
一般會員


發表:41
回覆:42
積分:16
註冊:2004-05-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2006-11-30 03:43:00 IP:211.76.xxx.xxx 訂閱
請問一下你有試過轉為3d的嗎?
系統時間:2024-05-09 2:16:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!