




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第如何利用C语言输出3D立体感心形图详解目录★头文件部分:★主函数外自定义函数部分:★主函数部分:总结首先我先在每行(除空白以及{}外)代码上标上序号(无序号源码放在了文末)
#includestdio.h
#includemath.h
floatf(floatx,floaty,floatz)
floata=x*x+9.0f/4.0f*y*y+z*z-1;
returna*a*a-x*x*z*z*z-9.0f/80.0f*y*y*z*z*z;
floath(floatx,floatz)
for(floaty=1.0f;y=0.0f;y-=0.001f)
if(f(x,y,z)=0.0f)
returny;
return0.0f;
intmain()
for(floatz=1.5f;z-1.5f;z-=0.1f)
for(floatx=-1.5f;x1.5f;x+=0.05f)
floatv=f(x,0.0f,z);
if(v=0.0f)
floaty0=h(x,z);
floatny=0.01f;
floatnx=h(x+ny,z)-y0;
floatnz=h(x,z+ny)-y0;
floatnd=1.0f/sqrtf(nx*nx+ny*ny+nz*nz);
floatd=(nx+ny-nz)*nd*0.5f+0.5f;
putchar(".:-=+*#%@"[(int)(d*5.0f)]);
else
putchar('');
putchar('\n');
return0;
此次空白行以及语句块{}空白花括号就不再多加赘述,简要来说,就是为了整体的完整性与可读性。
首先先说一下数值后面加f的问题,例如:y=1.0f1.0后面的f用于强调前面的1.0是一个float量。如果不加,默认为double,加了之后,赋值给y时会自动转换为float的。
逐行分析(除空白以及{}空白行外):
★头文件部分:
1.头文件的定义,可以说是老朋友了,stdio头文件,非常常用的头文件。
2.math头文件,看到math,我们应该会想起数学这个名字,其实没错,math.h头文件定义了各种数学函数和一个宏。此处定义这个头文件的原因就是用到了数学函数sqrtf。
★主函数外自定义函数部分:
3.定义了一个float类型的函数f,有三个float类型的形参x,y,z。
4.定义了一个float类型的变量a,将其赋值为x*x+9.0f/4.0f*y*y+z*z-1;
5.返回一个表达式的值:returna*a*a-x*x*z*z*z-9.0f/80.0f*y*y*z*z*z;
有关4和5的解释:这其实跟上一次平面心形图方程类型,只不过增加到了第三维度,此处为立体感心形方程:
x*x+9.0f/4.0f*y*y+z*z-1;
returna*a*a-x*x*z*z*z-9.0f/80.0f*y*y*z*z*z;
6.定义了一个float类型的函数h,有两个float类型的形参x,z。
7.float定义y=1.0f,1.0后面的f用于强调前面的1.0是一个float量。如果不加,默认为double,加了之后,赋值给y时会自动转换为float的。
y=0.0f判断条件;
z-=0.1f;也就是z=z-0.1f;可以类比i-=2;即i=i-2;
8.if(f(x,y,z)=0.0f)条件判断,调用函数f传参x,y,z看函数返回值是否小于等于0,如果小于,说明y的值就对了,返回y的值到主函数。
9.见8.
10.return返回0.0f表示结束了该函数的执行。
★主函数部分:
11.主函数的定义。
12.见7.分析
ps:12和13不再多加阐述,和7道理相同。
13.见7.分析
14.float定义了一个v变量,接收了y=0.0f即y为定值时函数f的返回值。
15.条件判断,看函数返回的v值是否小于等于0,如果小于等于0,则执行语句块内容,输出所设定字符。
16.由15可知,15成立则进入语句16的执行,此处定义变量y0来接收返回值。
17.定义浮点型变量ny,并给它赋值为0.01f。
18.floatnx=h(x+ny,z)-y0;经h函数返回之后相当于,nx=y(x变化)-y0;
19.floatnz=h(x,z+ny)-y0;经h函数返回之后相当于,nz=y(z变化)-y0;
20.floatnd=1.0f/sqrtf(nx*nx+ny*ny+nz*nz);这里的nd的值就相当于(x*x+y*y+z*z)开方再取倒数。
21.floatd=(nx+ny-nz)*nd*0.5f+0.5f;d值相当于d=(x+y-z)*1.0f/sqrtf(x*x+y*y+z*z)+0.5f。
22.putchar(".:-=+*#%@"[(int)(d*5.0f)]);输出所设定字符,更好地呈现出立体感心形。
关于17——22这些都是为了更好的呈现立体感图形所写,关联到输出的位置,输出的形状等多个方面,可以说,是立体感心形代码中核心代码之一(而且是很关键的)。
23.ifelse中else否则部分;
24.如果执行else语句,则输出空白;
25.输出换行;
26.return0;return语句结束main()函数的执行,把0返还给操作系统。
无序号源码:
#includestdio.h
#includemath.h
floatf(floatx,floaty,floatz)
floata=x*x+9.0f/4.0f*y*y+z*z-1;
returna*a*a-x*x*z*z*z-9.0f/80.0f*y*y*z*z*z;
floath(floatx,floatz)
for(floaty=1.0f;y=0.0f;y-=0.001f)
if(f(x,y,z)=0.0f)
returny;
return0.0f;
intmain()
for(floatz=1.5f;z-1.5f;z-=0.1f)
for(floatx=-1.5f;x1.5f;x+=0.05f)
floatv=f(x,0.0f,z);
if(v=0.0f)
floaty0=h(x,z);
floatny=0.01f;
floatnx=h(x+ny,z)-y0;
floatnz=h(x,z+ny)-y0;
floatnd=1.0f/sqrtf(nx*nx+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论