使用C语言实现二维,三维绘图算法(3)-简单的二维分形
2013-11-17 23:12
851 查看
使用C语言实现二维,三维绘图算法(3)-简单的二维分形
---- 引言----
每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其实想想, Win32中既然存在画线画点函数, 利用计算机图形学的知识, 我们用可以用纯C调用Win32实现三维绘图, 完全不用借助OpenGL和DirectX, 这有重复造轮子的嫌疑, 但是自己动手实现一遍, 毕竟也是有意义的.
[效果演示]
C=(-0.75, 0.0) C=(0.45, -0.1428)
C=(0.285, 0.0)
[绘图原理概述]
对于复数z0=x+iy,取不同的x 值和y 值,函数迭代的结果不一样:对于有些z0,函数值约束在某一范围内;而对于另一些z0,函数值则发散到无穷。由于复数对应平面上的点,因此我们可以用一个平面图形来表示,对于哪些z0 函数值最终趋于无穷,对于哪些z0 函数值最终不会趋于无穷。我们用深灰色表示不会使函数值趋于无穷的z0;对于其它的z0,我们用不同的颜色来区别不同的发散速度。由于当某个时候|z|>2 时,函数值一定发散,因此这里定义发散速度为:使|z|大于2 的迭代次数越少,则发散速度越快。这个图形可以编程画出。
[编程实现要点]
绘制分形的主函数
---- 引言----
每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其实想想, Win32中既然存在画线画点函数, 利用计算机图形学的知识, 我们用可以用纯C调用Win32实现三维绘图, 完全不用借助OpenGL和DirectX, 这有重复造轮子的嫌疑, 但是自己动手实现一遍, 毕竟也是有意义的.
[效果演示]
C=(-0.75, 0.0) C=(0.45, -0.1428)
C=(0.285, 0.0)
[绘图原理概述]
对于复数z0=x+iy,取不同的x 值和y 值,函数迭代的结果不一样:对于有些z0,函数值约束在某一范围内;而对于另一些z0,函数值则发散到无穷。由于复数对应平面上的点,因此我们可以用一个平面图形来表示,对于哪些z0 函数值最终趋于无穷,对于哪些z0 函数值最终不会趋于无穷。我们用深灰色表示不会使函数值趋于无穷的z0;对于其它的z0,我们用不同的颜色来区别不同的发散速度。由于当某个时候|z|>2 时,函数值一定发散,因此这里定义发散速度为:使|z|大于2 的迭代次数越少,则发散速度越快。这个图形可以编程画出。
[编程实现要点]
绘制分形的主函数
void DrawFractal() { float cr,ci,zr,zi,pr,pi; int i,j,k; cr= 0.45; ci= -0.1428; for(i=-320;i<=320;i++) { for(j=-240;j<=240;j++) { zr=i/200; zi=j/200; for(k=0;k<=255;k++) { if(sqrt(zr*zr+zi*zi)/2>2.0) { break; } else { pr=zr*zr-zi*zi; pi=2.0*zr*zi; zr=pr+cr; zi=pi+ci; } } PutPixel(i+320, j+240, k); } } }
相关文章推荐
- 使用C语言实现二维,三维绘图算法(3)-简单的二维分形
- 使用C语言实现二维,三维绘图算法(1)-透视投影
- 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示
- 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示
- 使用C语言实现二维,三维绘图算法(1)-透视投影
- Windows环境是使用C语言计算程序或算法执行时间的不同粒度实现
- C语言求最大公约数(两种最简单的算法实现)
- Python简单实现KNN算法及绘图练习
- 魔方简单实现(c语言,tc2.0编译通过)不含解魔方的算法
- 已知三点坐标求外接圆方程和RANSAC算法的介绍,用C语言实现,其使用随机抽样一致性算法来求最合适圆时使用
- 【C语言】没事可以试试这个小程序,使用文件操作,模拟实现一个简单的文件拷贝工具!
- 使用Neo4j和简单分词算法实现菜品推荐系统
- 魔方简单实现(c语言,tc2.0编译通过)不含解魔方的算法
- C语言使用结构体实现简单通讯录
- Linux下使用socket传输文件的C语言简单实现
- 使用C语言实现简单的扫雷程序
- 一个javafx初学者实现国际象棋简单方法(很粗暴)棋子实现不再提供 没有使用java编程思想用的很基础的c语言思想
- C语言几种简单的算法实现2
- c#打包文件解压缩 C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法 一个简单例子理解C#的协变和逆变 对于过长字符串的大小比对
- 使用C语言实现串的匹配朴素算法(BF算法)