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 ...
随机推荐
- UVA 10917 Walk Through the Forest SPFA
uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem= ...
- 9.9 Binder系统_Java实现_Android里java程序的编译启动
如果知道了进程号:通过ls /proc/进程号/task 可以看到所有线程 cat /proc/进程号/task/线程号/comm 可以达到线程名字(主线程是main,主线程号就是进程号) d ...
- 关于Linux启动时挂载rootfs的几种方式
一直对Linux启动时挂载根文件系统的过程存在着很多疑问,今天在水木精华区找到了有用的资料,摘录如下: 1.Linux启动时,经过一系列初始化之后,需要mount 根文件系统,为最后运行init进程等 ...
- go 字符串 数字 整型 浮点 转换
import "strconv" //先导入strconv包 // string到int int, err := strconv.Atoi(string) // string到in ...
- php 转义html标签 反转html标签 符号
$a = '<strong>123</strong>'; //假设这是html代码$b = htmlspecialchars($a); //将< ...
- vim :g
https://stackoverflow.com/questions/1946738/vim-how-to-delete-every-second-row An elegant (and effic ...
- jquery-11 留言板如何实现
jquery-11 留言板如何实现 一.总结 一句话总结:用live()方法让后面动态添加的元素也绑定之前对应类绑定的方法. 1.如何让后面动态添加的元素也绑定之前对应类绑定的方法? 用live()方 ...
- C#验证手机号
using System.Text.RegularExpressions; private bool IsMobile(string phoneNo) { return Regex.IsMatch(p ...
- Android 开发--CMakeList调用本地so文件
这里写代码片Android开发常常遇到Java调用so文件的情况,本文介绍一下Google最近新推出的应用在android studio中的方法–cmakelist.txt格式调用. so文件分为jn ...
- Opencv Sift算子特征提取与匹配
SIFT算法的过程实质是在不同尺度空间上查找特征点(关键点),用128维方向向量的方式对特征点进行描述,最后通过对比描述向量实现目标匹配. 概括起来主要有三大步骤: 1.提取关键点: 2.对关键点附加 ...