使用C语言实现二维,三维绘图算法(3)-简单的二维分形
使用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 的迭代次数越少,则发散速度越快。这个图形可以编程画出。
[编程实现要点]
绘制分形的主函数
void DrawFractal()
{
float cr,ci,zr,zi,pr,pi;
int i,j,k; cr= 0.45;
ci= -0.1428; for(i=-;i<=;i++)
{
for(j=-;j<=;j++)
{
zr=i/;
zi=j/;
for(k=;k<=;k++)
{
if(sqrt(zr*zr+zi*zi)/>2.0)
{
break;
}
else
{
pr=zr*zr-zi*zi;
pi=2.0*zr*zi;
zr=pr+cr;
zi=pi+ci;
}
}
PutPixel(i+, j+, k);
}
} }
使用C语言实现二维,三维绘图算法(3)-简单的二维分形的更多相关文章
- 使用C语言实现二维,三维绘图算法(1)-透视投影
使用C语言实现二维,三维绘图算法(1)-透视投影 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其实想想 ...
- 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示
使用C语言实现二维,三维绘图算法(2)-解析曲面的显示 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- CSS 3 中二维三维以及渐变过程简单总结 及效果(动图不好发)
一. 不动,区域内的变化(本质生产一张图片) /*渐变 1 长方形之渐变先定义长方形的宽高大小(好观察最好加边框) ...
- Java生成艺术二维码也可以很简单
原文点击: Quick-Media Java生成艺术二维码也可以很简单 现在二维码可以说非常常见了,当然我们见得多的一般是白底黑块,有的再中间加一个 logo,或者将二维码嵌在一张特定的背景中(比如微 ...
- VC、OpenGL、ArcGIS Engine开发的二维三维结合的GIS系统
一.前言 众所周知,二维GIS技术发展了近四十年,伴随着计算机软硬件以及关系型数据库的飞速发展,二维GIS技术已日臻完善.在对地理信息的分析功能上有着无可比拟的优势.一些宏观的地理信息,一维的地理信息 ...
- ARCGIS二维三维导航
在使用代码前需要先安装arcgis10.0 或者10.1都可以 不过本人建议初学者安装10.0比较容易安装.. 安装方式和二维三维地图的加载网上都有,就不在此一一赘述了. 先从基本的功能开 ...
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- 《MATLAB从入门到放弃》二维曲线和图形绘制基础(二):使用Help文档学习line、plot、plotyy、subplot、hold绘图函数
目录: » plot 最常用的二维曲线绘图函数 > 帮助文档 > 基本使用语法 > 线条的样式.符号和颜色调整 > 图形属性调整 > 使用图形句柄进行设置 » ...
- matlab的三维绘图和四维绘图
一.三维绘图1.曲线图plot3(X1,Y1,Z1,...):以默认线性属性绘制三维点集(X1,Y1,Z1)确定的曲线plot3(X1,Y1,Z1,LineSpec):以参数LineSpec确定的线性 ...
随机推荐
- 后台字符串转化成json
function remotecontrol() { var progressbar = $("#progressbar"); $.ajax({ url: myurl, type: ...
- POJ 2200 A Card Trick(模拟)
题目链接 题意 : 一共52张牌(A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K)花色分别是C,D,H,S ...给助理5张牌,然后助理需要重新排一下次序,把第一张牌给观 ...
- 【转】linux下cvs配置
1. 验证是否已安装CVS #rpm -q cvs 如果能显示出类似这样的版本信息,证明已安装CVS: #cvs-1.11.19 若没有安装信息,则需要从htttp://www.cvshome.or ...
- photoshop:模仿-广告放射背景
模仿对象:图片大小960*400 过程: 1.新建文档,大小为:960*800 2.选择渐变工具,黑白从上往下渐变 3.滤镜->扭曲->波浪,参考设置 4.滤镜->扭曲->极坐 ...
- umount nfs状态为busy的处理方法
umountall状态为busy的系统: 以下四种情况,文件系统都会显示:umount: file_system_name busy 1 A program is accessing a file o ...
- 去除windows的Shift+Space 全角半角切换
windows7下的输入法,有一个“全/半角切换”的快捷方式“Shift+Space”,我们可以通过以下方式查看到: “开始”->“控制面板”->“区域和语言”->“键盘和语言”-& ...
- 【HDOJ】2388 Playground Hideout
优先级队列直接AC. /* 2388 */ #include <iostream> #include <sstream> #include <string> #in ...
- Area of a Circle
Area of a Circle Description: Complete the function circleArea so that it will return the area of a ...
- Android开发之内容观察者
内容观察者: 当关注应用的数据库数据改变时,内容提供者会发出通知,在内容提供者的uri上注册一个内容观察者,就可以收到数据改变的通知 实现步骤: 1.假如是自定义的ContentProvider,需要 ...
- poj 3274 Gold Balanced Lineup(哈希 )
题目:http://poj.org/problem?id=3274 #include <iostream> #include<cstdio> #include<cstri ...