有限元c語言程序
我的一點想法,提取邊界,(所有點的x,y坐標已知)
步驟
1.建立一個已有邊界點隊列,初始為空
2.首先找第一點(x,y),提取y坐標最小值的點,若存在相同y坐標,任意取一點即可
3.將該點(x,y)加入邊界點隊列
4.從(x,y)點開始,標記該點位發起點,依次遍歷除了邊界點隊列中已存在點以外的所有點(x1,y1)。
5.計算x y 與 x1, y1之間的仰角關系,找出所有中仰角最小的點(x1,y1),可通過兩點之間的斜率進行計算,注意存在正負關系,(存在相同仰角關系,因此還需要記錄兩點之間的長度,當仰角相同時取長度短的點)
6.將該點(x1,y1)加入邊界隊列(從此步驟開始,重復步驟3,4, 5)迭代,直到一直檢索到最初始點後,邊界計算完成
獻丑了,看錯題目當成二維坐標。
三維坐標可能麻煩些,我的一些想法,個人未驗證過,僅供提示,希望有所幫助
步驟
1.提取z坐標最小的點,若存在多個點,任意取一點。
2.建立一個連接線記錄隊列,初始為空
3.遍歷所有該點以外的所有點,找出仰角最小的點,以這兩點的連接線記錄。
4.遍歷除了連接線記錄隊列中已有連接線端點外的所有點(x,y,z),計算該連接線與點(x,y,z)組成的平面,與除了這平面三點以外的所有其他點與該平面的垂距關系(存在正負關系),若所有其他點都在該平面的同側,即正負關系一致,則確定該三點平面為邊界三角形的一個,將三角形的三邊加入連接線記錄隊列
5.(從本步驟開始,以該邊界三角網的除初始邊外的另兩邊進行步驟4的迭代,當迭代到找不到除已有連接線記錄隊列中點以外的符合條件的點為止)
這樣就完成的所有邊界點的計算了。
對於你的演算法,我感覺有所紕漏,邊界三角形的邊也有可能被多個三角形所共用的。
個人愚見,未經驗證,請勿拍磚
『貳』 可以用C語言編寫元計算有限元語言嗎
你好,可以的,有限元語言及其編譯器是元計算公司開發的將「有限元語言」翻譯為「C++語言」直至可執行程序的軟體。
僅代表個人觀點,不喜勿噴,謝謝。
『叄』 鍩轟簬c璇璦鐨勪竴緇存湁闄愬厓杞浠剁殑璁捐
boolInitFft(FFT_HANDLE*hfft,intcount,intwindow)
46{
47inti;
48
49hfft->count=count;
50hfft->win=newfloat[count];
51if(hfft->win==NULL)
52{
53returnfalse;
54}
55hfft->wt=newCOMPLEX[count];
56if(hfft->wt==NULL)
57{
58delete[]hfft->win;
59returnfalse;
60}
61for(i=0;i<count;i++)
62{
63hfft->win[i]=float(0.50-0.50*cos(2*M_PI*i/(count-1)));
64}
65for(i=0;i<count;i++)
66{
67floatangle=-i*M_PI*2/count;
68hfft->wt[i].re=cos(angle);
69hfft->wt[i].im=sin(angle);
70}
71
72returntrue;
73}
74
75voidFFT(FFT_HANDLE*hfft,COMPLEX*TD2FD)
76{
77inti,j,k,butterfly,p;
78
79intpower=NumberOfBits(hfft->count);
80
81/*銛跺艦榪愮畻*/
82for(k=0;k<power;k++)
83{
84for(j=0;j<1<<k;j++)
85{
86butterfly=1<<(power-k);
87for(i=0;i<butterfly/2;i++)
88{
89p=j*butterfly;
90COMPLEXt=TD2FD[i+p]+TD2FD[i+p+butterfly/2];
91TD2FD[i+p+butterfly/2]=(TD2FD[i+p]-TD2FD[i+p+butterfly/2])*hfft->wt[i*(1<<k)];
92TD2FD[i+p]=t;
93}
94}
95}
96
97/*閲嶆柊鎺掑簭*/
98for(i=1,j=hfft->count/2;i<=hfft->count-2;i++)
99{
100if(i<j)
101{
102COMPLEXt=TD2FD[j];
103TD2FD[j]=TD2FD[i];
104TD2FD[i]=t;
105}
106k=hfft->count/2;
107while(k<=j)
108{
109j=j-k;
110k=k/2;
111}
112j=j+k;
113}
114}