C語言圣誕樹的實(shí)現(xiàn)示例_第1頁
C語言圣誕樹的實(shí)現(xiàn)示例_第2頁
C語言圣誕樹的實(shí)現(xiàn)示例_第3頁
C語言圣誕樹的實(shí)現(xiàn)示例_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第C語言圣誕樹的實(shí)現(xiàn)示例效果如下:

#define_CRT_SECURE_NO_WARNINGS1

#includemath.h

#includestdio.h

#includestdlib.h

#includestring.h

#definePI3

floatsx,sy;

typedeffloatMat[4][4];

typedeffloatVec[4];

voidscale(Mat*m,floats){

Mattemp={{s,0,0,0},{0,s,0,0},{0,0,s,0},{0,0,0,1}};

memcpy(m,temp,sizeof(Mat));

voidrotateY(Mat*m,floatt){

floatc=cosf(t),s=sinf(t);

Mattemp={{c,0,s,0},{0,1,0,0},{-s,0,c,0},{0,0,0,1}};

memcpy(m,temp,sizeof(Mat));

voidrotateZ(Mat*m,floatt){

floatc=cosf(t),s=sinf(t);

Mattemp={{c,-s,0,0},{s,c,0,0},{0,0,1,0},{0,0,0,1}};

memcpy(m,temp,sizeof(Mat));

voidtranslate(Mat*m,floatx,floaty,floatz){

Mattemp={{1,0,0,x},{0,1,0,y},{0,0,1,z},{0,0,0,1}};

memcpy(m,temp,sizeof(Mat));

voidmul(Mat*m,Mata,Matb){

Mattemp;

for(intj=0;jj++)

for(inti=0;ii++){

temp[j][i]=0.0f;

for(intk=0;kk++)

temp[j][i]+=a[j][k]*b[k][i];

memcpy(m,temp,sizeof(Mat));

voidtransformPosition(Vec*r,Matm,Vecv){

Vectemp={0,0,0,0};

for(intj=0;jj++)

for(inti=0;ii++)

temp[j]+=m[j][i]*v[i];

memcpy(r,temp,sizeof(Vec));

floattransformLength(Matm,floatr){

returnsqrtf(m[0][0]*m[0][0]+m[0][1]*m[0][1]+m[0][2]*m[0][2])*r;

floatsphere(Vecc,floatr){

floatdx=c[0]-sx,dy=c[1]-sy;

floata=dx*dx+dy*dy;

returnar*rsqrtf(r*r-a)+c[2]:-1.0f;

floatopUnion(floatz1,floatz2){

returnz1z2z1:z2;

floatf(Matm,intn){

floatz=-1.0f;

for(floatr=0.0f;r0.8f;r+=0.02f){

Vecv={0.0f,r,0.0f,1.0f};

transformPosition(v,m,v);

z=opUnion(z,sphere(v,transformLength(m,0.05f*(0.95f-r))));

if(n0){

Matry,rz,s,t,m2,m3;

rotateZ(rz,1.8f);

for(intp=0;pp++){

rotateY(ry,p*(2*PI/6));

mul(m2,ry,rz);

floatss=0.45f;

for(floatr=0.2f;r0.8f;r+=0.1f){

scale(s,ss);

translate(t,0.0f,r,0.0f);

mul(m3,s,m2);

mul(m3,t,m3);

mul(m3,m,m3);

z=opUnion(z,f(m3,n-1));

ss*=0.8f;

returnz;

floatf0(floatx,floaty,intn){

sx=x;

sy=y;

Matm;

scale(m,1.0f);

returnf(m,n);

intmain(intargc,char*argv[]){

//這個(gè)里可以加打印信息喲,為他添加專屬的printf

intn=argc1atoi(argv[1]):3;

floatzoom=argc2atof(argv[2]):1.0f;

for(floaty=0.8f;y-0.0f;y-=0.02f/zoom,putchar('\n'))

for(floatx=-0.35f;x0.35f;x+=0.01f/zoom){

floatz=f0(x,y,n);

if(z-1.0f){

floatnz=0.001f;

floatnx=f0(x+nz,y,n)-z;

floatny=f0(x,y+nz,n)-z;

floatnd=sqrtf(nx*nx+ny*ny+nz*nz);

floatd=(nx-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論