【MATLAB】 分形插值

every blog every motto: The shortest answer is doing.

0. 前言

本节简单介绍下基于Matlab的分形插值代码,网上关于这方面资料比较少,在这里进行简单的整理。

1. 正文

1.1 二维(x,y)分形插值

1.1.1 结果展示

原始点数据新建一个txt文件,保存后删除后缀,放在./data文件夹下
在这里插入图片描述

在这里插入图片描述
迭代1次,效果
在这里插入图片描述
迭代三次效果
在这里插入图片描述

1.1.2 代码部分

% This is a fline.m program (fractal line interpolation)
clear
clc

% 前期设置
% file_name = input('输入数据文件名:','s');
% rate = input('输入纵向压缩比:');
% iteration_num = input('输入迭代次数(<4):');
file_name = 'num';
rate = 0.3;
iteration_num = 3;
t = num2str(iteration_num); % 迭代次数数值转字符串

% 输入、输出路径
input_path = ['./data/' file_name]; % 输入数据存放位置
output_path = [input_path '_output_' t]; % 输出数据存放位置
hold off

% 加载数据
eval(['load ' input_path]);
eval(['data=' file_name ';']); % 将数据存放在data变量中
eval(['clear ' file_name]); % 删除文件名变量的值

x = data(1,:); % x 
y = data(2,:); % y

[t,n] = size(x);

denominator = x(n) - x(1); % 公式分母
point_section = n-1; % 插值点区间
plot(x,y,'--ok');
hold on

% 公式计算
for k=1: iteration_num % 迭代iteration_num次
    disp(['迭代次数:' ,num2str(k)])
  
    for i=1:point_section
        a(i) = (x(i+1)-x(i))/denominator;
        e(i) = (x(n)*x(i)-x(1)*x(i+1))/denominator;
        c(i) = (y(i+1)-y(i)-rate*(y(n)-y(1)))/denominator;
        f(i) = ((x(n)*y(i)-x(1)*y(i+1))-rate*(x(n)*y(1)-x(1)*y(n)))/denominator;
    end
    
    for i=1:point_section
        for j=1:n
            xx((i-1)*point_section+j) = a(i)*x(j)+e(i);
            yy((i-1)*point_section+j) = c(i)*x(j) + rate*y(j)+f(i);
        end
    end
    disp(['------第' num2str(k)  '次迭代完成-------']);
    size(yy)
    % 迭代计算
    [t,n] = size(xx);
    point_section = n-1;
    % 不同的线性
    if k==1,line=''':k''';end
    if k>=2,line='''-k''';end
    eval(['plot(xx,yy, ' line ')']); % 画图
    x = xx;
    y = yy;
end

% 保存最后一次数据
save_con_str = ['fwd=fopen(' '''' output_path '''' ',' '''' 'w' '''' ')']; 
eval([save_con_str ';']);

for i=1:n
    fprintf(fwd,'%8.4f',xx(i));
end
fprintf(fwd,'\n') ;
for i=1:n
    fprintf(fwd,'%8.4f',yy(i));
end
fclose(fwd);



1.2 三维(x,y,z) 分形插值

1.2.1 结果展示

原始数据,放在当前文件夹(./data/)下,新建一个txt,保存数据后删除后缀
在这里插入图片描述
结果1:
在这里插入图片描述
结果2:
在这里插入图片描述

1.2.2 代码

二维、三维的分形插值完整代码:
https://download.csdn.net/download/weixin_39190382/12674351

猜你喜欢

转载自blog.csdn.net/weixin_39190382/article/details/107695224