openGL虚线点划线KOCK曲线实验报告文档格式.docx
- 文档编号:21512866
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:8
- 大小:64.30KB
openGL虚线点划线KOCK曲线实验报告文档格式.docx
《openGL虚线点划线KOCK曲线实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《openGL虚线点划线KOCK曲线实验报告文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
glLineStipple(Glintfactor,GLushortpattern);
3Kock曲线
Kock曲线的初始生成员是一条直线,生成规则是将直线段分为三等分,首尾两段保持不变,中间用两段等长且互成60°
角的直线段代替。
这样,直线段被分成四段,每段长度都只有原来的1/3。
Kock曲线的分形维数为
D=ln4/ln3≈1.26186
假设原直线的首尾点是P0(x0,y0),P1(x1,y1),则新的四段直线段的五个端点坐标分别为
(x0,y0)
(x0+(x1-x0)/3,y0+(y1-y0)/3)
((x1+x0)/2±
(y0-y1)√3/6,(y1+y0)/2±
(x1-x0)√3/6)
(x0+2(x1-x0)/3,y0+2(y1-y0)/3)
(x1,y1)
其中,第三个点坐标公式中的正负号表示中间两条心直线段处于元直线段的哪一侧。
根据这一规则迭代六次。
2)程序调试、测试与运行结果分析
1直线的绘制结果
2虚线的绘制结果
3以直线作为初始生成元的Kock曲线
4以三角形作为初始生成元的Kock曲线
4、实验总结
在上一次的实验基础上,利用
GL_LINES画直线,这项实验内容比较容易。
然后,利用glEnable(GL_LINE_STIPPLE)函数和glLineStiopple(Glintfactor,GLushort
pattern)进行虚线和点画线的实现。
也是比较简单的。
第二个实验是利用Kock曲线实现迭代生成图形,这个实验很难。
用了两节课的时间,最终也没有成功。
我自己没有做成功,去请教别人,看别人的才做出来的。
看到生成的图像很漂亮
不管结果怎么样,我在这次的实验中学到了很多知识,对编程也好,对openGL也好,都有了更好更深的理解。
5、附录
1>
直线的绘制
#include<
gl/glut.h>
intwinWidth=400,winHeight=300;
voidInitial(void)
{
glClearColor(1.0f,1.0f,1.0f,1.0f);
}
voidChangeSize(intw,inth)
winWidth=w;
winHeight=h;
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,winWidth,0.0,winHeight);
voidDisplay(void)
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f,0.0f,0.0f);
glBegin(GL_LINES);
glVertex2i(100,80);
glVertex2i(220,250);
glEnd();
glutSwapBuffers();
intmain(intargc,char*argv[])
glutInit(&
argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(400,300);
glutInitWindowPosition(100,100);
glutCreateWindow("
直线"
);
glutDisplayFunc(Display);
glutReshapeFunc(ChangeSize);
Initial();
glutMainLoop();
return0;
2>
虚线及点划线的绘制
虚线"
glEnable(GL_LINE_STIPPLE);
glLineStipple(2,0X00FF);
3>
以直线为生成元的Kock曲线
#include<
GL/glut.h>
iostream>
vector>
math.h>
#definePI3.1415926
usingnamespacestd;
structPoint
{
floatx;
floaty;
};
staticvector<
Point>
count;
staticintm=0;
//迭代次数
floatline;
voidfirst_state(vector<
&
count)
//初始情况是只有两个点
Pointfirst={-1.0f,0.0f},end={1.0f,0.0f};
line=sqrt(pow(first.x-end.x,2)+pow(first.y-end.y,2));
count.push_back(first);
count.push_back(end);
}
voidDraw_pic(vector<
for(vector<
:
size_typei=0;
i!
=(count.size()-1);
i++)
glVertex2f(count[i].x,count[i].y);
glVertex2f(count[i+1].x,count[i+1].y);
voidCalculate_point(vector<
vector<
new_count;
floatpline=line/(float)pow((float)3,(int)m);
size_typei;
for(i=0;
=(count.size()-1);
i++)
Pointp1,p2,pmid;
p1.x=count[i].x+(count[i+1].x-count[i].x)/3;
p1.y=count[i].y+(count[i+1].y-count[i].y)/3;
p2.x=count[i+1].x-(count[i+1].x-count[i].x)/3;
p2.y=count[i+1].y-(count[i+1].y-count[i].y)/3;
doublealpha=0.0;
if(count[i+1].y>
=count[i].y)
alpha=atan((double)(count[i+1].y-count[i].y)/(count[i+1].x-count[i].x));
if(count[i+1].x>
count[i].x)
pmid.x=p1.x+pline*cos(alpha+PI/3);
pmid.y=p1.y+pline*sin(alpha+PI/3);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- openGL 虚线 划线 KOCK 曲线 实验 报告