1. 芒德球(Mandelbulb)
芒德球(Mandelbulb)是一种在三维空间中表现的分形结构,这种结构从二维的Mandelbrot集合得到启发并拓展到三维空间。Mandelbrot集合是在复平面上定义的,而芒德球则是在三维的实数空间中定义的。
芒德球的构造过程如下:
首先在三维空间中选取一个点,以其坐标作为一个复数的实部和虚部。
然后,按照Mandelbrot集合的方法,对该复数进行迭代:将其自己平方,然后加上原始的复数。
判断迭代后的复数的模是否超过某个界限值。如果超过了这个界限值,那么这个点就不属于芒德球;如果在一定次数的迭代后都没有超过这个界限值,那么这个点就属于芒德球。
和其他分形结构一样,芒德球也具有自相似性:无论你放大多少倍观察,你都能看到和原始芒德球相同的结构。
芒德球的形状取决于迭代的次数和界限值的选择。在某些参数下,芒德球的形状非常奇特和美丽,因此常常被用来制作计算机图形学的艺术作品。
2.MATLAB代码
clear all;clc;close all;
% 在这个代码中,R, Theta, Phi分别表示每个点的球坐标的半径、极角和方位角。我们对每个点进行了球坐标系下的复数迭代,然后用patch和isonormals函数生成了Mandelbulb的图像。
% 你可以通过调用mandelbulb(res, n, lim)来生成Mandelbulb,其中res是分辨率,n是迭代次数,lim是界限。例如,mandelbulb(100, 20, 2)将会以100x100x100的分辨率进行20次迭代,
% 并且设置半径的界限为2。注意,这个程序可能在运行时需要消耗大量的计算资源和时间。
res=200;
n=30;
lim=2;
% res is the resolution
% n is the number of iterations
% lim is the limit for the absolute value
% Initialize the figure
figure;
axis equal off;
hold on;
% Define the range in the 3D space
x = linspace(-2, 2, res);
y = linspace(-2, 2, res);
z = linspace(-2, 2, res);
[X, Y, Z] = meshgrid(x, y, z);
% Perform the iteration
R = sqrt(X.^2 + Y.^2 + Z.^2);
Theta = atan2(sqrt(X.^2 + Y.^2), Z);
Phi = atan2(Y, X);
for k = 1:n
Rn = R.^8;
Thetan = 8.*Theta;
Phin = 8.*Phi;
X = Rn .* sin(Thetan) .* cos(Phin);
Y = Rn .* sin(Thetan) .* sin(Phin);
Z = Rn .* cos(Thetan);
R = sqrt(X.^2 + Y.^2 + Z.^2);
Theta = atan2(sqrt(X.^2 + Y.^2), Z);
Phi = atan2(Y, X);
end
% Plot the set
p = patch(isosurface(x, y, z, R, lim));
isonormals(x, y, z, R, p);
set(p, 'FaceColor', 'red', 'EdgeColor', 'none');
view(3);
camlight;
lighting gouraud;
xlim([-2 2]);
ylim([-2 2]);
zlim([-2 2]);
3.程序结果