1
我試圖實現一個謝爾賓斯基金字塔,這就像一個謝爾賓斯基三角形,但在3D中。
我有這樣的結構,包含所有關於金字塔的數據:謝爾賓斯基金字塔遞歸算法
typedef struct
{
GLfloat xUp;
GLfloat yUp;
GLfloat zUp;
GLfloat base;
GLfloat height;
}pyramid;
然後,我已經寫了計算三個子金字塔的功能:
void findSubPyramids(pyramid pyr, pyramid subs[3])
{
for(int i=0; i<3; i++)
{
subs[i].height=pyr.height/2.0;
subs[i].base=pyr.base/2.0;
}
memcpy(subs,&pyr,3*sizeof(GLfloat));
subs[1].yUp= pyr.yUp-pyr.height/2.0;
subs[1].xUp= pyr.xUp+pyr.base/4.0;
subs[1].zUp= pyr.zUp-pyr.base/4.0;
subs[2].yUp= subs[1].yUp;
subs[2].xUp= pyr.xUp-pyr.base/4.0;
subs[2].zUp= subs[1].zUp;
}
但這種算法的實現是錯誤的:事情是錯誤的ZUP在底部的兩個子金字塔的座標:確實金字塔不抽,因爲我想:
但是,如果我使用glOrtho代替gluPerspective,金字塔繪製好。我知道gluPerspective和我使用的函數是正確的,但算法是錯誤的。
這是我實現了計算所有子金字塔的算法:
void drawSierpinskyPyramid (pyramid pyr)
{
assert(EQUAL(pyr.height, pyr.base));
if(pyr.base > 4.0)
{
setRandomColor();
pyramid subs[3];
drawPyramid(pyr);
findSubPyramids(pyr, subs);
for(int i=0; i<3; i++)
{
drawSierpinskyPyramid(subs[i]);
}
}
}
我不明白什麼是錯的。
爲什麼不'findSubPyramids()''修改潛艇[0]'?不應該'subs []'包含*四*金字塔? 'drawPyramid()'實現在哪裏? – genpfault
有4個子金字塔,但是一個金字塔已經被繪製,所以我需要繼續繪製3個子金字塔。 –