• 大小: 388KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: 其他
  • 标签: opengl  

资源简介

适合学习计算机图形学的同学,比较完整的代码,并且是正确的。

资源截图

代码片段和文件信息

/************************************************************************/
/* 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


评论

共有 条评论