数学之美之分形——C++及OpenCV实现Julia集和Mandelbrot集绘制

本文介绍了如何使用C++和OpenCV实现Julia集和Mandelbrot集的绘制。通过代码实现快速计算分形,并展示多彩效果。同时,程序支持鼠标操作放大以及保存图片。尽管存在配色和计算速度的问题,作者仍深感数学之美的震撼,并计划研究多线程以提高效率。
摘要由CSDN通过智能技术生成

搞了一天,终于全部搞定了,久久惊叹于分形的美而不能自拔……

先来简单介绍下Julia集和Mandelbrot集:(来自这里

     曼德勃罗特(Mandelbrot)集是人类有史以来做出的最奇异,最瑰丽的几何图形.曾被称为“上帝的指纹”。 

       这个点集均出自公式:Zn+1=(Zn)^2+C,

  这是一个迭代公式,式中的变量都是复数.这是一个大千世界,从他出发可以产生无穷无尽美丽图案,他是曼德勃罗特教授在二十世纪七十年代发现的.你看上图中,有的地方象日冕,有的地方象燃烧的火焰,只要你计算的点足够多,不管你把图案放大多少倍,都能显示出更加复杂的局部.这些局部既与整体不同,又有某种相似的地方,好像着梦幻般的图案具有无穷无尽的细节和自相似性.曼德勃罗特教授称此为"魔鬼的聚合物".为此,曼德勃罗特在1988年获得了"科学为艺术大奖".

      更详尽的解释请看维基百科

      好了,让我们边讲代码边体会吧:我们要做这样一个程序,它

  1.     可以快速计算分形
  2.     可以彩色显示
  3.     可以鼠标画矩形放大
  4.     可以将观察过程的图片存起来

      1、首先,做一些准备工作:

#include <cv.h>
#include <highgui.h>
#include <cxcore.h>

#define IMG_8UB(img,x,y) ((uchar*)(img->imageData + img->widthStep * (y)))[3 * (x)] 
#define IMG_8UG(img,x,y) ((uchar*)(img->imageData + img->widthStep * (y)))[3 * (x) + 1]
#define IMG_8UR(img,x,y) ((uchar*)(img->imageData + img->widthStep * (y)))[3 * (x) + 2]
#define IMG8U(img,x,y) ((uchar*)(img->imageData + img->widthStep * (y)))[(x)] 

CvPoint pt1 = {-1,-1};//两个用来记录鼠标点击和放松的点
CvPoint pt2 = {-1,-1};
IplImage* fractal;
IplImage* fcopy;//用来画矩形
int width = 600;//图像宽和高
int height = 400;
double XMax = 2.5;//复平
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值