有限元分析中的二维Delaunay三角网格剖分代码实现.docx
- 文档编号:3240827
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:16
- 大小:17.95KB
有限元分析中的二维Delaunay三角网格剖分代码实现.docx
《有限元分析中的二维Delaunay三角网格剖分代码实现.docx》由会员分享,可在线阅读,更多相关《有限元分析中的二维Delaunay三角网格剖分代码实现.docx(16页珍藏版)》请在冰豆网上搜索。
有限元分析中的二维Delaunay三角网格剖分代码实现
有限元分析中的二维Delaunay三角网格剖分代码实现
//二维平面点集的Delaunay三角剖分
#include"stdafx.h"
#include
#include
#include
#include
usingnamespacestd;
#definepoint_size600
#definepi3.1415926
structpoint
{
floatx,y;
};
structtriangle
{
point*Pv[3];
floatr_of_sqrt;
pointo_of_tr;
};
structd_t_node
{
triangleTnode;
d_t_node*Pt_l[3];
intposition_in_dt;
intzhuangtai_when_new;
};
pointp1,p2,p3,p4;
intn;
pointp[point_size];
intdt_last=0;
pointp_in_dtriangle1[point_size+1];
d_t_nodeDtriangle[point_size];
pointp_in_dtriangle2[point_size+1];
d_t_node*queue_t[point_size];
pointp_in_dtriangle3[point_size+1];
intps_last=0;
intqueue_t_last=0;
pointget_spoint_cin(point*p,intn);
pointget_spoint_rank(point*p,intn);
voidget_spoint_squre(point*p,int);
voidget_spoint_cir(point*,int);
voidread_spoint(point*p,intn);
voidDisplay();
voidinit_D_triangle(d_t_node*D_tr);
voidPjoin_ps(point*ps,point*p_new,intps_last);
voidpjion_D_triangle(d_t_node*Dtriangle,int&dt_last,pointp_new);
intfindt_clude_p(d_t_node*Dtriangle,intdt_last,pointp_new);
voidsort_to_line(pointline_of_tr[point_size][2],intline_of_lin[point_size],intthis_fh_when_new[point_size][2],intline_of_tr_last);
floathls(floata,floatb,floatc,floatd);
pointget_o(pointp1,pointp2,pointp3);
floatlong_of_lines(pointpoint1,pointpoint2);
boolp_in_q(d_t_node**queue,pointp_new);
voidput_bug(d_t_node);
voidput_this(intpsize[point_size][2],intlast);
voidread_triangle(d_t_nodeDtriangle[point_size]);
voidput_out_line(pointline_of_tr[point_size][2],intline_of_tr_last);
intmain(intargc,char*argv[])
{
for(intii=0;ii { for(intjj=0;jj<3;jj++) { switch(jj) { case0: Dtriangle[ii].Tnode.Pv[jj]=&p_in_dtriangle1[ii+1];break; case1: Dtriangle[ii].Tnode.Pv[jj]=&p_in_dtriangle2[ii+1];break; case2: Dtriangle[ii].Tnode.Pv[jj]=&p_in_dtriangle3[ii+1];break; } } }; //点集为圆上的点,输入圆的个数 /*intm; cin>>m; n=m*36+1; get_spoint_cir(p,m);*/ //点集为正方形网格的交点,输入网格的行数 /*intm; cin>>m; n=m*m; get_spoint_squre(p,m);*/ //点集为随机生成的点,输入点的数量 cout<<"请输入点数大小n="; cin>>n; get_spoint_rank(p,n); glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE); glutInitWindowPosition(100,100); glutInitWindowSize(300,300); glutCreateWindow("第一个OpenGL程序"); glColor3f(0.0,0.0,1.0); init_D_triangle(Dtriangle); for(inti=0;i { pjion_D_triangle(Dtriangle,dt_last,p[i]); } glClearColor(1.0,1.0,1.0,1.0); glutDisplayFunc(Display); glutMainLoop(); return0; }; voidget_spoint_cir(point*p,intnn) { floatr; p[0].x=0.5; p[0].y=0.5; //intxi,xii; for(intiii=0;iii { //xi=nn-1;xii=xi-iii; r=(float(iii)+1.0)*0.5/float(nn+1); for(intjjj=0;jjj<36;jjj++) { p[iii*36+jjj+1].x=float(r*cos(float(jjj)*pi/18.0))+0.5; p[iii*36+jjj+1].y=float(r*sin(float(jjj)*pi/18.0))+0.5; } } }; voidget_spoint_squre(point*p,intnn) { for(inti=0;i for(intj=0;j p[i*nn+j].x=float(j+1.0)/float(nn+1), p[i*nn+j].y=float(i+1.0)/float(nn+1); }; voidput_out_line(pointline_of_tr[point_size][2],intline_of_tr_last) { for(inti=0;i { cout<<"("< cout<<"("< }cout< }; voidread_triangle(d_t_nodeDtriangle[point_size]) { for(inti=0;i { glBegin(GL_LINE_LOOP); glVertex2f((Dtriangle[i].Tnode.Pv[0]->x-0.5)*2.0,(Dtriangle[i].Tnode.Pv[0]->y-0.5)*2); glVertex2f((Dtriangle[i].Tnode.Pv[1]->x-0.5)*2.0,(Dtriangle[i].Tnode.Pv[1]->y-0.5)*2); glVertex2f((Dtriangle[i].Tnode.Pv[2]->x-0.5)*2.0,(Dtriangle[i].Tnode.Pv[2]->y-0.5)*2); glEnd(); }; }; voidread_spoint(point*p,intn) { for(inti=0;i glVertex2f(p[i].x,p[i].y); }; voidDisplay() { glClear(GL_COLOR_BUFFER_BIT); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glPointSize(4.0); read_triangle(Dtriangle); glFlush(); }; voidput_this(intpsize[point_size][2],intlast) { for(inti=0;i cout< for(i=0;i cout< }; voidput_bug(d_t_nodeDtriangle1) { for(inti=0;i<3;i++) { cout<<"point: "< } cout<<"the_o: "< cout<<"the_r"< cout<<"poistion_in_Dt"< cout<<"zhuangtai: "< for(i=0;i<3;i++) { if(Dtriangle1.Pt_l[i]! =NULL) { cout<<"_"< -> position_in_dt; } elsecout<<"_NULL"; }cout< }; boolp_in_q(d_t_node*queue_t,pointp_new) { floatp_o,r
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 有限元分析 中的 二维 Delaunay 三角 网格 代码 实现