交互式图形学 Sierpslewinskii镂垫程序初始点GLfloat ...

Sierpinski&镂垫
生成Sierpinski 镂垫算法描述:
& (1)在三角形内部随机选取一个点作为初始点
& (2)在三角形的3个顶点中随机选取一个,求出该顶点与初始点连线的中点,画出该中点
&&(3)将(2)中的中点作为初始点,转到(2)
下面是OpenGL的具体实现:
#include &GL/glut.h&
#include &cstdlib&
#define N 5000
typedef GLfloat point[2];
point vertex[3] = {{5.0,5.0},{50.0,90.0},{95.0,5.0}};
void display()
glClear(GL_COLOR_BUFFER_BIT);
& &int i,j;
&& point p = {50.0,50.0};
& &glBegin(GL_POINTS);
&& for(i = 0 ; i &
&j = rand()%3;
&p[0] = (p[0] + vertex[j][0]) / 2;
&p[1] = (p[1] + vertex[j][1]) / 2;
&glVertex2fv(p);
& &glEnd();
& &glFlush();
void myinit()
&glClearColor(1.0,1.0,1.0,1.0);
&glColor3f(0,1.0,0);
&glMatrixMode(GL_PROJECTION);
&glLoadIdentity();
&gluOrtho2D(0,100.0,0,100.0);
&glMatrixMode(GL_MODELVIEW);
int main(int argc,char** argv)
&glutInit(&argc,argv);
&glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
&glutInitWindowPosition(100,100);
&glutInitWindowSize(500,500);
&glutCreateWindow("Sierpinsk 镂垫");
&glutDisplayFunc(display);
&myinit();
&glutMainLoop();
&&& return
运行程序,可得Sierpinski 镂垫,如下:
<img STYLE="width: 386 height: 347" src="/blog7style/images/common/sg_trans.gif" real_src ="/middle/cc469c2c1a&690"
ALT="Sierpinski&镂垫"
TITLE="Sierpinski&镂垫" />
可见,在次数N较大时,它并没表现出随机性;分析最原始的三角形,连结三边的中点,将原三角形分成4个小三角形,无论你如何选择初始点,要画出的点都不会出现在中间那个倒立的三角区域中。基于此,可以通过递归的方式生成Sierpinski
镂垫,对于每个三角形,去掉其中间的那个三角形部分。
实现如下:
#include &GL/glut.h&
#include &cstdlib&
#define N 5
typedef GLfloat point[2];
point vertex[3] = {{5.0,5.0},{50.0,90.0},{95.0,5.0}};
void draw_triangle(point v1,point v2,point v3)
&glBegin(GL_TRIANGLES);
&glVertex2fv(v1);
&glVertex2fv(v2);
&glVertex2fv(v3);
void divide_triangle(point v1,point v2,point v3,int n)
&point p[3];
&&for(int i = 0 ; i
& 2 ; ++i)
&&&p[0][i] =
(v1[i] + v2[i]) / 2;
&&&p[1][i] =
(v2[i] + v3[i]) / 2;
&&&p[2][i] =
(v3[i] + v1[i]) / 2;
&&divide_triangle(p[0],v2,p[1],n-1);
&&divide_triangle(p[0],v1,p[2],n-1);
&&divide_triangle(p[1],v3,p[2],n-1);
&&draw_triangle(v1,v2,v3);
void display()
&glClear(GL_COLOR_BUFFER_BIT);
&divide_triangle(vertex[0],vertex[1],vertex[2],N);
&glFlush();
void myinit()
&glClearColor(1.0,1.0,1.0,1.0);
&glColor3f(0,1.0,0);
&glMatrixMode(GL_PROJECTION);
&glLoadIdentity();
&gluOrtho2D(0,100.0,0,100.0);
&glMatrixMode(GL_MODELVIEW);
int main(int argc,char** argv)
&glutInit(&argc,argv);
&glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
&glutInitWindowPosition(100,100);
&glutInitWindowSize(500,500);
&glutCreateWindow("Sierpinsk 镂垫");
&glutDisplayFunc(display);
&myinit();
&glutMainLoop();
&&& return
&下面将这个2维的Sierpinski 镂垫转换为3维的Sierpinski
镂垫,上面的两种方式均可以完成转换,这里采用递归的方式,实现如下:
#include &GL/glut.h&
#define N 4
typedef float point[3];
point v[]={{0.0, 0.0, 1.0}, {0.0, 0.942809, -0.33333},
{-0.816497, -0.471405, -0.333333}, {0.816497, -0.471405,
-0.333333}};
void triangle( point a, point b, point c)
&glBegin(GL_TRIANGLES);
glVertex3fv(a);
glVertex3fv(b);
glVertex3fv(c);
void divide_triangle(point a, point b, point c, int m)
for(int j=0; j&3; j++)
&&&v[0][j]=(a[j]+b[j])/2;
&&&v[1][j]=(a[j]+c[j])/2;
&&&v[2][j]=(b[j]+c[j])/2;
divide_triangle(a, v[0], v[1], m-1);
divide_triangle(c, v[1], v[2], m-1);
divide_triangle(b, v[2], v[0], m-1);
&&triangle(a,b,c);
void tetrahedron(int m)
&glColor3f(1.0,0.0,0.0);
divide_triangle(v[0], v[1], v[2], m);
&glColor3f(0.0,1.0,0.0);
divide_triangle(v[3], v[2], v[1], m);
&glColor3f(0.0,0.0,1.0);
divide_triangle(v[0], v[3], v[1], m);
&glColor3f(0.0,0.0,0.0);
divide_triangle(v[0], v[2], v[3], m);
void display()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
tetrahedron(N);
glFlush();
void myReshape(int w, int h)
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2.0, 2.0, -2.0 * (GLfloat) h / (GLfloat) w,
&&&&&&&&&&&
2.0 * (GLfloat) h / (GLfloat) w, -10.0, 10.0);
glOrtho(-2.0 * (GLfloat) w / (GLfloat) h,
&&&&&&&&&&&
2.0 * (GLfloat) w / (GLfloat) h, -2.0, 2.0, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glutPostRedisplay();
void myinit()
&glEnable(GL_DEPTH_TEST);
&&& glClearColor
(1.0, 1.0, 1.0, 1.0);
void main(int argc, char **argv)
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
&glutInitWindowPosition(100,100);
glutInitWindowSize(500, 500);
glutCreateWindow("3D Sierpinski 镂垫");
glutReshapeFunc(myReshape);
glutDisplayFunc(display);
&myinit();
glutMainLoop();
运行结果如下:
<img src="/blog7style/images/common/sg_trans.gif" real_src ="/middle/cc"
ALT="Sierpinski&镂垫"
TITLE="Sierpinski&镂垫" />
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。交互式计算机图形学_实 例 程 序_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
喜欢此文档的还喜欢
交互式计算机图形学_实 例 程 序
以&#8203;四&#8203;自&#8203;由&#8203;度&#8203;关&#8203;节&#8203;型&#8203;工&#8203;程&#8203;机&#8203;械&#8203;手&#8203;三&#8203;维&#8203;实&#8203;时&#8203;动&#8203;态&#8203;仿&#8203;真&#8203;系&#8203;统&#8203;为&#8203;背&#8203;景&#8203;,&#8203;介&#8203;绍&#8203;了&#8203;O&#8203;p&#8203;e&#8203;n&#8203;G&#8203;L&#8203; &#8203;图&#8203;形&#8203;库&#8203;的&#8203;功&#8203;能&#8203;和&#8203;特&#8203;点&#8203;以&#8203;及&#8203;O&#8203;p&#8203;e&#8203;n&#8203;G&#8203;L&#8203;与&#8203;W&#8203;i&#8203;n&#8203;d&#8203;o&#8203;w&#8203;s&#8203;图&#8203;形&#8203;接&#8203;口&#8203;的&#8203;设&#8203;置&#8203;方&#8203;法&#8203;。&#8203;在&#8203;进&#8203;行&#8203;运&#8203;动&#8203;学&#8203;分&#8203;析&#8203;的&#8203;基&#8203;础&#8203;上&#8203;,&#8203;建&#8203;立&#8203;了&#8203;机&#8203;械&#8203;手&#8203;数&#8203;学&#8203;模&#8203;型&#8203;,&#8203;阐&#8203;述&#8203;了&#8203;利&#8203;用&#8203;O&#8203;p&#8203;e&#8203;n&#8203;G&#8203;L&#8203;和&#8203;V&#8203;C&#8203;+&#8203;+&#8203; &#03;.&#03; &#8203;联&#8203;合&#8203;编&#8203;程&#8203;以&#8203;实&#8203;现&#8203;机&#8203;械&#8203;手&#8203;动&#8203;态&#8203;仿&#8203;真&#8203;的&#8203;方&#8203;法&#8203;。&#8203;最&#8203;后&#8203;讨&#8203;论&#8203;了&#8203;O&#8203;p&#8203;e&#8203;n&#8203;G&#8203;L&#8203;在&#8203;机&#8203;器&#8203;人&#8203;仿&#8203;真&#8203;中&#8203;的&#8203;应&#8203;用&#8203;前&#8203;景&#8203;,&#8203;用&#8203;O&#8203;p&#8203;e&#8203;n&#8203;G&#8203;L&#8203;图&#8203;形&#8203;库&#8203;对&#8203;机&#8203;器&#8203;人&#8203;的&#8203;动&#8203;态&#8203;仿&#8203;真&#8203;有&#8203;一&#8203;定&#8203;通&#8203;用&#8203;性&#8203;,&#8203;对&#8203;降&#8203;低&#8203;机&#8203;器&#8203;人&#8203;的&#8203;设&#8203;计&#8203;成&#8203;本&#8203;以&#8203;及&#8203;运&#8203;动&#8203;学&#8203;实&#8203;验&#8203;具&#8203;有&#8203;重&#8203;要&#8203;的&#8203;现&#8203;实&#8203;意&#8203;义&#8203;。
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢【论文】外场中Sierpinski镂垫上磁模型的临界性质_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
中国最大最早的专业内容网站
评价文档:
&购买后可评价
&&&#165;2.00
&&&#165;2.00
&&&#165;2.00
&&&#165;2.00
&&&#165;2.00
&&&#165;2.00
&&&#165;3.00
&&&#165;2.00
&&&#165;1.00
&&&#165;2.00
您可以上传图片描述问题
联系电话:
请填写真实有效的信息,以便工作人员联系您,我们为您严格保密。
外场中Sierpinski镂垫上磁模型的临界性质
采&#8203;用&#8203;空&#8203;间&#8203;部&#8203;分&#8203;中&#8203;点&#8203;消&#8203;约&#8203;重&#8203;整&#8203;化&#8203;群&#8203;变&#8203;换&#8203;的&#8203;方&#8203;法&#8203;,&#8203;研&#8203;究&#8203;了&#8203;有&#8203;外&#8203;磁&#8203;场&#8203;S&#8203;i&#8203;e&#8203;r&#8203;p&#8203;i&#8203;n&#8203;s&#8203;k&#8203;i&#8203;镂&#8203;垫&#8203;上&#8203;I&#8203;s&#8203;i&#8203;n&#8203;g&#8203;模&#8203;型&#8203;和&#8203;G&#8203;a&#8203;u&#8203;s&#8203;s&#8203;模&#8203;型&#8203;的&#8203;相&#8203;变&#8203;和&#8203;临&#8203;界&#8203;性&#8203;质&#8203;,&#8203;求&#8203;出&#8203;了&#8203;其&#8203;临&#8203;界&#8203;点&#8203;的&#8203;临&#8203;界&#8203;指&#8203;数&#8203;。&#8203;结&#8203;果&#8203;表&#8203;明&#8203;:&#8203;在&#8203;这&#8203;种&#8203;分&#8203;形&#8203;晶&#8203;格&#8203;上&#8203;,&#8203;两&#8203;种&#8203;模&#8203;型&#8203;的&#8203;临&#8203;界&#8203;性&#8203;质&#8203;存&#8203;在&#8203;很&#8203;大&#8203;的&#8203;差&#8203;异&#8203;,&#8203;即&#8203;在&#8203;临&#8203;界&#8203;点&#8203;处&#8203;,&#8203;对&#8203;于&#8203;I&#8203;s&#8203;i&#8203;n&#8203;g&#8203;模&#8203;型&#8203;,&#8203;最&#8203;近&#8203;邻&#8203;相&#8203;互&#8203;作&#8203;用&#8203;参&#8203;量&#8203;K&#8203; &#8203;*&#8203;=&#8203;∞&#8203;,&#8203;磁&#8203;场&#8203;h&#8203; &#8203;*&#8203;=&#03;;&#8203;而&#8203;对&#8203;于&#8203;G&#8203;a&#8203;u&#8203;s&#8203;s&#8203;模&#8203;型&#8203;,&#8203;K&#8203; &#8203;*&#8203;=&#8203;b&#8203;/&#03;b&#8203;是&#8203;G&#8203;a&#8203;u&#8203;s&#8203;s&#8203;分&#8203;布&#8203;常&#8203;数&#8203;)&#8203;,&#8203;h&#8203; &#8203;*&#8203;=&#03;。
试读已结束,如果需要继续阅读或下载,敬请购买
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢
同期刊文献附加实验1 Sierpinski三角形 - 慢步前行 - 博客园
1.实验目的:
理解掌握一个OpenGL绘制图形的完整程序结构。
2.实验内容:
(1) 运行示范实验代码,掌握程序结构与每一个语句含义;
(2) 了解分形图形的生成特点,并能将其扩展、举一反三。
3.实验原理:
&&& Sierpinski三角形是一种分形图形,它是递归地构造的。最常见的构造方法如下图所示:把一个三角形分成四等份,挖掉中间那一份,然后继续对另外三个三角形进行这样的操作,并且无限地递归下去。每一次迭代后整个图形的面积都会减小到原来的3/4,因此最终得到的图形面积显然为0。这也就是说,Sierpinski三角形其实是一条曲线。
大概在下图上标注了一下一个三角形迭代过程:
生成Sierpinski 三角形算法描述,如图1所示:
(1)从一个三角形开始;
(2)连接三边的中点并去掉中间的三角形;
(3)重复上述过程;
4.示范代码:
#include &GL/glut.h&// a point data type typedef GLfloat point2d[2];//initial triangle point2d v[3] = {{-1.0, -0.58}, {1.0, -0.58}, {0.0, 1.15}}; // number of recursive steps
// display one triangle void triangle( point2d a, point2d b, point2d c){&&& glBegin(GL_TRIANGLES);&&& glVertex2fv(a);&&& glVertex2fv(b);&&& &&& glVertex2fv(c);&&& glEnd();}
// triangle subdivision using vertex numbers void divide_triangle(point2d a, point2d b, point2d c, int m) {&&& point2d v0, v1, v2;&&&&&& if(m&0) {&&&&&&& for(j=0; j&2; j++) v0[j]=(a[j]+b[j])/2;&&&&&&& for(j=0; j&2; j++) v1[j]=(a[j]+c[j])/2;&&&&&&& for(j=0; j&2; j++) v2[j]=(b[j]+c[j])/2;&&&&&&& divide_triangle(a, v0, v1, m-1);&&&&&&& divide_triangle(c, v1, v2, m-1);&&&&&&& divide_triangle(b, v2, v0, m-1);&&& }&&& else(triangle(a,b,c));// draw triangle at end of recursion}
void mydisplay(void) {&&& glClear(GL_COLOR_BUFFER_BIT);&&& divide_triangle(v[0], v[1], v[2], n);&&& glFlush();}
void init() {&&& glClearColor(1.0, 1.0, 1.0,1.0); &&& glColor3f(0.0,0.0,0.0);&&& &&& glMatrixMode(GL_PROJECTION);&&& glLoadIdentity();&&& glOrtho(-2.0, 2.0, -2.0, 2.0, -1.0, 1.0);}
void main(int argc, char **argv){&&& n=1;&&& glutInit(&argc, argv);&&& glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);&&& glutInitWindowSize(500, 500);&&& glutInitWindowPosition(50,50); &&& glutCreateWindow("2D Sierpinski");&&& glutDisplayFunc(mydisplay);&&& init();&&& glutMainLoop();}
4. 实验作业:
请参考上述代码实现Koch曲线或Koch雪花的生成。
Koch曲线:
Koch雪花:
可参考如下资料:计算机图形学实验指导_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
喜欢此文档的还喜欢
计算机图形学实验指导
计&#8203;算&#8203;机&#8203;图&#8203;形&#8203;学&#8203;上&#8203;指&#8203;导
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢

我要回帖

更多关于 slewinski 的文章

 

随机推荐