資源簡介
適合學習計算機圖形學的同學,比較完整的代碼,并且是正確的。

代碼片段和文件信息
/************************************************************************/
/* 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? 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
- 上一篇:計算機系微機接口實驗代碼
- 下一篇:用于單片機的模糊控制算法程序
評論
共有 條評論