OpenCV绘制朱利亚(Julia)集合图形
朱利亚集合是一个在复平面上形成分形的点的集合。以法国数学家加斯顿·朱利亚(Gaston Julia)的名字命名。
朱利亚集合可以由下式进行反复迭代得到:
对于固定的复数c,取某一z值(如z = z0),可以得到序列
这一序列可能反散于无穷大或始终处于某一范围之内并收敛于某一值。我们将使其不扩散的z值的集合称为朱利亚集合。
以下使用OpenCV编码绘制Julia集图形:
#include <Windows.h>
#include<highgui/highgui.hpp>
using namespace cv;
const int icount = 200; //迭代次数
const float c = -0.85; //实部
const float d = 0.088; //虚部
double m_real, m_image; //Mandelbro集
class ComplexClass
{
public:
double real;
double image;
ComplexClass(double r = 0, double i = 0) { real = r, image = i; }
};
ComplexClass operator+(const ComplexClass& a, const ComplexClass &b)
{
ComplexClass c;
c.real = a.real + b.real;
c.image = a.image + b.image;
return c;
}
ComplexClass operator*(const ComplexClass& a, const ComplexClass &b)
{
ComplexClass c;
c.real = a.real * b.real - a.image * b.image;
c.image = a.image * b.real + a.real * b.image;
return c;
}
double Model(ComplexClass a)
{
return sqrtf(a.real * a.real + a.image * a.image);
}
double Iteration(ComplexClass a, int n)
{
if (n == 0)
return Model(a);
else
{
ComplexClass temp = a*a;
temp.real += c;
temp.image += d;
// temp.real += m_real; 把这两句代替前面的两句就是mandelbrot集了
// temp.image += m_image;
return Iteration(temp, n - 1);
}
}
Vec3b dye(double dist)
{
if (dist < 1000000 && dist>-1000000)
return Vec3b(255, 0, 0);
else
return Vec3b(0, 0, 0); //Julia集之外的区域置为黑色
}
int main()
{
Mat image = Mat(Size(500, 500), CV_8UC3, Scalar::all(10));
for (int Y = 0; Y < image.rows; Y++)
{
for (int X = 0; X < image.cols; X++)
{
float x = (X - image.cols / 2) / 200.0;
float y = (Y - image.rows / 2) / 200.0;
m_real = x;
m_image = y;
ComplexClass a(x, y);
float dist = Iteration(a, icount);
image.at<Vec3b>(Y, X) = dye(dist);
}
}
//namedWindow("OpenCV For Julia", 0);
imshow("OpenCV For Julia | c = -0.85 d = 0.088", image);
waitKey();
}
改变实部c和虚数b的值可以得到不同的图形,很漂亮。
c=-0.576 d=0.456:
c=-0.8 d=0.156:
c=0.285 d=0.02:
c=-0.85 d=0.088:
OpenCV绘制朱利亚(Julia)集合图形的更多相关文章
- CUDA+OpenCV 绘制朱利亚(Julia)集合图形
Julia集中的元素都是经过简单的迭代计算得到的,很适合用CUDA进行加速.对一个600*600的图像,需要进行360000次迭代计算,所以在CUDA中创建了600*600个线程块(block),每个 ...
- 混沌分形之朱利亚集(JuliaSet)
朱利亚集合是一个在复平面上形成分形的点的集合.以法国数学家加斯顿·朱利亚(Gaston Julia)的名字命名.我想任何一个有关分形的资料都不会放过曼德勃罗集和朱利亚集.这里将以点集的方式生成出朱利亚 ...
- 详解用OpenCV绘制各类几何图形
摘要:本文详细介绍了OpenCV绘制几何图形的方法,利用cv2.line().v2.circle().cv2.rectangle().cv2.ellipse().cv2.polylines().cv2 ...
- Linux命令之dot - 绘制DOT语言脚本描述的图形
本文链接:http://codingstandards.iteye.com/blog/840055 用途说明 Graphviz (Graph Visualization Software的缩写)是一个 ...
- C# winform如何清除由Graphics类绘制出来的所有线条或图形
在C#winform应用程序中,可以用GDI绘制出线条或图形. 1.在主窗体上绘制线条或图形 using (Graphics g = this.CreateGraphics()) { ...
- Turtle绘制带颜色和字体的图形(Python3)
转载自https://blog.csdn.net/wumenglu1018/article/details/78184930 在Python中有很多编写图形程序的方法,一个简单的启动图形化程序设计的方 ...
- 绘制播放音乐时的音波图形的View
绘制播放音乐时的音波图形的View 这个效果类似于这个哦: 效果如下: 源码: MusicView.h 与 MusicView.m // // MusicView.h // Music // // C ...
- OpenCV绘制检测结果
OpenCV绘制检测结果 opencv rtcp timestamp 一.介绍 由于在验证阶段,使用FPGA时我们的算法检测速度很慢,没法直接在主流上进行绘图,否则的话,主流就要等待算法很久才能 ...
- [CTF]维吉尼亚密码(维基利亚密码)
[CTF]维吉尼亚密码(维基利亚密码) ----------------------百度百科 https://baike.baidu.com/item/维吉尼亚密码/4905472?fr=aladdi ...
随机推荐
- ios获取系统时间
//获取系统时间 NSDate * date=[NSDate date]; NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init]; ...
- js进阶 12-5 jquery中表单事件如何使用
js进阶 12-5 jquery中表单事件如何使用 一.总结 一句话总结:表单事件如何使用:可元素添加事件监听,然后监听元素,和javase里面一样. 1.表单获取焦点和失去焦点事件有哪两组? 注意是 ...
- Fragment的基本应用
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/50933621 Fragment 还是先来基本介绍. Fragment –> 片段 ...
- 爬虫抓取页面数据原理(php爬虫框架有很多 )
爬虫抓取页面数据原理(php爬虫框架有很多 ) 一.总结 1.php爬虫框架有很多,包括很多傻瓜式的软件 2.照以前写过java爬虫的例子来看,真的非常简单,就是一个获取网页数据的类或者方法(这里的话 ...
- MyCAT分表初体验
1.mycat二进制包安装 下载地址:http://dl.mycat.io/ tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar ...
- 细说CSS伪类和伪元素
原文 简书原文:https://www.jianshu.com/p/eae56b7fe7fe 大纲 1.伪元素 2.伪类元素 3.伪元素和伪类元素的区别 4.伪类和伪元素的使用 1.伪元素 伪元素在D ...
- 2016 Java程序员的年终总结(转)
2016 Java程序员的年终总结 技术积累 (1)代码规范 1.1.1.通常的模块分布:一般如果你要实现一个web 应用,你从后台将数据展示到前端页面,在一个比较大的公司,你少不了跟其他项目有交集( ...
- gcc编译选项--转
gcc提供了大量的警告选项,对代码中可能存在的问题提出警告,通常可以使用-Wall来开启以下警告: -Waddress -Warray-bounds (only with -O2) ...
- [RxJS] Split an RxJS Observable into groups with groupBy
groupBy() is another RxJS operator to create higher order observables. In this lesson we will learn ...
- dnf游戏外怪原理
dnf游戏外怪原理 一.总结 一句话总结:用钩子,修改内存.找到存储数据的内存,修改内存的执行代码达到修改数据的目的,修改了数据之后再改回来. 1.如何找到存储数据的内存? 然后数据变化,用软件找变化 ...