使用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=-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);
        }
    }

} 

 

转载于:https://www.cnblogs.com/chinamming/p/3428532.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值