资源简介
适合学习计算机图形学的同学,比较完整的代码,并且是正确的。
代码片段和文件信息
/************************************************************************/
/* KOCH曲线:C++/OpenGL实现(以直线为初始图形) */
/* 作者:刘畅 2009年11月3日 ****/
/************************************************************************/
#include
#include
#include
#include
#define PI 3.1415926
using namespace std;
struct Point
{
float x;
float y;
};
static vector count1count2count3;
const Point first = {-0.5f0.1f}end = {0.5f0.1f}second = {0.0f-0.766f};
static int m = 0; //迭代次数
float line ;
void first_state(vector &count1vector &count2vector &count3) //初始情况是只有两个点
{
line = sqrt( pow(first.x - end.x2) + pow(first.y - end.y2) );
count1.push_back(first);
count1.push_back(end);
count2.push_back(end);
count2.push_back(second);
count3.push_back(second);
count3.push_back(first);
}
void Draw_pic(vector &count1)
{
for (vector::size_type i = 0; i != (count1.size()-1) ; i++)
{
glBegin(GL_LINES);
glVertex2f(count1[i].x count1[i].y);
glVertex2f(count1[i+1].x count1[i+1].y);
glEnd();
}
for (vector::size_type i = 0; i != (count2.size()-1) ; i++)
{
glBegin(GL_LINES);
glVertex2f(count2[i].x count2[i].y);
glVertex2f(count2[i+1].x count2[i+1].y);
glEnd();
}
for (vector::size_type i = 0; i != (count3.size()-1) ; i++)
{
glBegin(GL_LINES);
glVertex2f(count3[i].x count3[i].y);
glVertex2f(count3[i+1].x count3[i+1].y);
glEnd();
}
}
void Calculate_point(vector &count1)
{
vector new_count;
float pline = line /(float) pow((float)3(int)m) ;
vector::size_type i;
for ( i= 0; i != (count1.size() - 1); i++ )
{
Point p1 p2 pmid;
p1.x = count1[i].x + (count1[i+1].x - count1[i].x) / 3;
p1.y = count1[i].y + (count1[i+1].y - count1[i].y) / 3;
p2.x = count1[i+1].x - (count1[i+1].x - count1[i].x) / 3;
p2.y = count1[i+1].y - (count1[i+1].y - count1[i].y) / 3;
//mark count[i+1].x < count[i].x情况下不成立
double alpha = 0.0;
if (count1[i+1].y >= count1[i].y)
{
alpha = atan((double) (count1[i+1].y - count1[i].y) / (count1[i+1].x - count1[i].x) );
if (count1[i+1].x > count1[i].x)
{
pmid.x = p1.x + pline * cos(alpha + PI / 3);
pmid.y = p1.y + pline * sin(alpha + PI / 3);
}
else
{
pmid.x = p1.x - pline * cos(alpha + PI / 3);
pmid.y = p1.y - pline * sin(alpha + PI / 3);
}
}
else
{
alpha = atan((double) (count1[i].y - count1[i+1].y) / (count1[i+1].x - count1[i].x) );
if (count1[i+1].x > count1[i].x)
{
pmid.x = p2.x - pline * cos(alpha + PI / 3);
pmid.y = p2.y + pline * sin(alpha + PI / 3);
}
else
{
pmid.x = p2.x + pline * cos(alpha + PI / 3);
pmid.y = p2.y - pline * sin(alpha + PI / 3);
}
}
new_count.push_back(count1[i]);
new_count.push_back(p1);
new_count.push_back(
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 98304 2009-11-04 13:15 OpenGL3\debug\OpenGL3.exe
文件 5264 2009-11-04 13:15 OpenGL3\OpenGL3\Debug\BuildLog.htm
文件 67298 2009-11-04 13:15 OpenGL3\OpenGL3\Debug\koch.obj
文件 65 2009-11-04 13:15 OpenGL3\OpenGL3\Debug\mt.dep
文件 145 2009-11-04 13:15 OpenGL3\OpenGL3\Debug\OpenGL3.exe.intermediate.manifest
文件 93184 2009-11-04 13:15 OpenGL3\OpenGL3\Debug\vc80.idb
文件 5307 2009-11-04 13:15 OpenGL3\OpenGL3\koch.cpp
文件 3038 2009-11-04 12:07 OpenGL3\OpenGL3\OpenGL3.vcproj
文件 1419 2009-11-04 13:16 OpenGL3\OpenGL3\OpenGL3.vcproj.liuchang-PC.liuchang.user
文件 1805312 2009-11-04 13:16 OpenGL3\OpenGL3.ncb
文件 886 2009-11-04 12:07 OpenGL3\OpenGL3.sln
..A..H. 9216 2009-11-04 13:16 OpenGL3\OpenGL3.suo
目录 0 2009-11-04 13:15 OpenGL3\OpenGL3\Debug
目录 0 2009-11-04 13:15 OpenGL3\debug
目录 0 2009-11-04 13:15 OpenGL3\OpenGL3
目录 0 2009-11-04 12:07 OpenGL3
----------- --------- ---------- ----- ----
2089438 16
- 上一篇:计算机系微机接口实验代码
- 下一篇:用于单片机的模糊控制算法程序
相关资源
- OpenGL的B样条、贝塞尔曲线和贝塞尔曲
- opengl\\雷达三维成像和雷达视觉
- 用opengl编写的一个小游戏
- openGL 模拟太阳系行星自转公转
- 读取DXF文件并在OpenGL中显示.
- 用VC opengl 绘制的一个房屋轮廓
- opengl类库大全glaux.lib;glu.lib;glu32.lib;
- 东南大学计算机图形学实验三 橡皮筋
- 东南大学计算机图形学实验二 简单
- OpenGL实现的3D魔方
- OPenGL中绘制茶杯模型
- 刚学的OpenGL画五角星
- 计算机图形学实验之区域填充实验报
- Qt自定义继承QOpenGLWidget的类进行绘图
- 读取obj文件含顶点法线,2013编译通过
- OpenGL画树的代码
- OpenGL开发的机械臂运动仿真程序
- 2017-2018计算机图形学A卷附(答案)
- Phong光照及在GLSL中使用函数
- 现代OpenGL+Qt:绘制可旋转、带光照效
- 现代OpenGL+Qt学习笔记之四:使用Unif
- 现代OpenGL+Qt学习笔记之三:显示一个
- 现代OpenGL+Qt学习笔记之二:程序框架
- OpenGL显示汉字
- openGL超级全的库,有GL.h、GLAUX.h/lib、
- 带纹理的茶壶
- glut搭建glut32bit和64bit
- opengl实现的光线跟踪算法2
- UG NX 与 Opengl联合编程
- OpenGL shader 代码,可正常编译,完美
评论
共有 条评论