openGL虚线点划线KOCK曲线实验报告文档格式.docx

上传人:b****5 文档编号:21512866 上传时间:2023-01-30 格式:DOCX 页数:8 大小:64.30KB
下载 相关 举报
openGL虚线点划线KOCK曲线实验报告文档格式.docx_第1页
第1页 / 共8页
openGL虚线点划线KOCK曲线实验报告文档格式.docx_第2页
第2页 / 共8页
openGL虚线点划线KOCK曲线实验报告文档格式.docx_第3页
第3页 / 共8页
openGL虚线点划线KOCK曲线实验报告文档格式.docx_第4页
第4页 / 共8页
openGL虚线点划线KOCK曲线实验报告文档格式.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

openGL虚线点划线KOCK曲线实验报告文档格式.docx

《openGL虚线点划线KOCK曲线实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《openGL虚线点划线KOCK曲线实验报告文档格式.docx(8页珍藏版)》请在冰豆网上搜索。

openGL虚线点划线KOCK曲线实验报告文档格式.docx

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);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职业技术培训

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1