有限元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}