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 ...
随机推荐
- C#使用wkhtmltopdf.exe,HTML页面转化为PDF文档
此文用来记录使用wkhtmltopdf.exe在C#代码中将html转换为PDF的过程: 1,在http://wkhtmltopdf.org/downloads.html 下载wkhtmltopdf. ...
- ssi的使用 开启 配置等
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lsfhack/article/details/69664402ssi的定义SSI(Server Si ...
- C语言主要做哪些方面的开发---一个来自“IT技术学习”微信群的问题及答复
近期,在"IT技术学习"微信群中,有同学问了这样一个问题:C语言主要做哪些方面的开发?在这篇文章中,我想结合自身的经验,对这个问题进行下解答. C语言是计算机及其相关专业(如通信. ...
- Emmet超详细教程
Emmet超详细教程 一.总结 一句话总结:用的时候照着用,能提高效率. 1.快捷键如何使用? 需要敲代码的时候把快捷键放到旁边即可.照着敲. 二.Emmet超详细教程 Emmet的前身是大名鼎鼎的Z ...
- 最简单的基于FFmpeg的AVUtil样例 (AVLog, AVOption等)
本文的演示样例程序记录了FFmpeg的libavutil中几种工具函数的用法: AVLog:日志输出AVOption (AVClass):选项设置AVDictionary:键值对存储ParseUtil ...
- android SQLite 使用实例
Android作为眼下主流的移动操作系统,全然符合SQLite占用资源少的优势,故在Android平台上,集成了一个嵌入式关系型数据库-SQLite.假设想要开发 Android 应用程序,须要在 A ...
- python implementation for Qt's QDataStream(看一下QDataStream的结构)
#!/usr/bin/env python # -*- coding: utf- -*- from __future__ import print_function from __future__ i ...
- jquery-10 js加载的时机如何选择
jquery-10 js加载的时机如何选择 一.总结 一句话总结:主要应用widow的ready()方法和load()方法. 1.内部文件中DOM加载完毕执行js如何书写? 把js标签放在body之后 ...
- html5的float属性超详解(display,position, float)(文本流)
html5的float属性超详解(display,position, float)(文本流) 一.总结 1.文本流: 2.float和绝对定位都不占文本流的位置 3.普通流是默认定位方式,就是依次按照 ...
- 【C++竞赛 H】The sum problem
Time Limit: 1s Memory Limit: 32MB 问题描述 Given a sequence 1,2,3,-,N, your job is to calculate the numb ...