生成随机平滑的二维闭合曲线
计算科学
matlab
Python
可视化
几何学
2021-12-21 21:09:55
2个回答
由于你的图形是一个闭环,它的参数曲线和必须是周期函数。这提出了一种生成此类图形的方法,即通过对具有随机幅度和相位的正弦曲线/谐波求和来构造随机平滑周期函数和不幸的是,很难保证这样的图形不会自相交。
但附近的想法是切换到极坐标,并考虑半径是极角的函数的圆形图形。闭环条件要求是周期性的,您可以使用相同类型的谐波总和过程来生成随机平滑周期性。如果你通过添加一些常数项(大于随机幅度的总和
一些实现这个想法的matlab代码:
clear all
close all
% Randomize amplitude and phase.
H = 10;
rho = rand(1,H) .* logspace(-0.5,-2.5,H);
phi = rand(1,H) .* 2*pi;
% Accumulate r(t) over t=[0,2*pi]
t = linspace(0,2*pi,101);
r = ones(size(t));
for h=1:H
r = r + rho(h)*sin(h*t+phi(h));
end
% Reconstruct x(t), y(t)
x = r .* cos(t);
y = r .* sin(t);
% Plot r(t) vs t
figure;
plot(t,r,'r-');
xlabel('t, radians');
ylabel('r(t)');
% Plot x(t) and y(t)
figure;
hold on;
plot(0,0,'ko');
plot(cos(t),sin(t),'k--');
plot(x,y,'b-');
xlabel('x(t)');
ylabel('y(t)');
axis equal;
这是一些示例(随机)输出:
使用 python + numpy + matplotlib 实现相同的想法应该很简单。
我最终做的是下载数千张随机图像,使用高斯滤波器对其进行平滑处理,并提取不同级别的轮廓。我从每个模糊图像中提取了 2-3 个闭合轮廓,并将它们全部打包成一组曲线。我的 MATLAB 代码可在此处获得:
https://github.com/royvelich/smooth-curves-generator
但是,您必须自己收集图像,一种选择是使用:
其它你可能感兴趣的问题









