ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-尝试创建反向的Mandelbrot集时会变形

2019-11-08 04:01:25  阅读:254  来源: 互联网

标签:complex-numbers fractals mandelbrot java processing


当我制作普通的Mandelbrot集时,它可以正常工作.但是,当我尝试将其转换为类似泪滴的事物时(请参阅此处以获取更多上下文:https://www.youtube.com/watch?v=mLJJUElQMRY),它完全失真了,看起来像泪滴一样.

我曾尝试调查过,但似乎我所做的一切都正确.我通过将1除以’c’变量来求逆.

这是我的代码的一部分,它是实际的公式,它是在处理过程中编写的,它只是Java,带有附加的可视库:

zx2=zx*zx;
zy2=zy*zy;
zy = 2*zx*zy + 1.0/(y); //the "1.0/" is what makes it inverted, a normal Mandelbrot set is just y and x on its own.
zx = zx2-zy2 + 1.0/(x);

当我运行代码时,它极度失真,甚至看起来都不像泪珠!看起来像这样:

然后我尝试通过实现答案的代码来修复它,这是代码:

zx2=zx*zx;
zy2=zy*zy;
zy = 2*zx*zy + (y/(x*x+y*y));
zx = zx2-zy2 + (x/(x*s+y*y));       

但是,尽管看起来确实是倒过来的,但它仍然失真,看起来不像泪珠.这是一张照片:

.

实施代码时我做错了什么吗?

解决方法:

我们需要将c视为一个复数,因此在普通的Mandelbrot情况下,我们有:

zy = 2*zx * zy + cy;
zx = zx2 - zy2 + cx;

但是要获得c的倒数,我们必须做一个复杂的倒数:

zy = 2*zx * zy + (cy / (cx**2 + cy**2));
zx = zx2 - zy2 + (cx / (cx**2 + cy**2));

当然,由于c从循环的角度来看是恒定的,因此我们可以在循环之前计算倒数.在像Python这样具有复数的语言中,这是对普通Mandelbrot的简单更改:

c = complex(real, imaginary)

z = 0j

for i in range(iterations):
    if abs(z) >= 4.0:
        break

    z = z * z + c

倒Mandelbrot:

c = 1 / complex(real, imaginary)

z = 0j

for i in range(iterations):
    # ...

但是,如果我们自己实现复数,那么对于普通的Mandelbrot,我们可以这样做:

x = real
y = imaginary

zx = 0
zy = 0

for i in range(iterations):
    zx2 = zx * zx
    zy2 = zy * zy

    if ((zx2 + zy2) ** 0.5) >= 4.0:
        break

    zy = 2*zx * zy + y
    zx = zx2 - zy2 + x

对于倒置的Mandelbrot,我们这样做:

denominator = real**2 + imaginary**2

x = real / denominator
y = imaginary / denominator

zx = 0
zy = 0

for i in range(iterations):
    # ...

底线是:

1 / complex(real, imaginary)  # correct

和:

complex(1 / real, 1 / imaginary)  # incorrect

enter image description here

标签:complex-numbers,fractals,mandelbrot,java,processing
来源: https://codeday.me/bug/20191108/2005327.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有