Изменение Алгоритма РСИФ в ДСИФ для Аттракта

Обсуждение вопросов, связанных с другими тулбоксами

Модератор: Admin

piv_vpi
Пользователь
Сообщения: 1
Зарегистрирован: Сб ноя 03, 2018 1:33 am

Изменение Алгоритма РСИФ в ДСИФ для Аттракта

Сообщение piv_vpi » Сб ноя 03, 2018 1:58 am

Дан алгоритм РСИФ для построения аттракта.
DIAMOND = 17;
M = zeros( 2, 2, 20, 10 );
B = zeros( 2, 20, 10 );
P = zeros( 20, 10 );
m = zeros( 20 );
P( DIAMOND, : ) = [ 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0 0 ];
M( :, :, DIAMOND, 1 ) = [ 0.5 0; 0.4 0.1 ]; B( :, DIAMOND,1 ) = [ 1; 1.2 ];
M( :, :, DIAMOND, 2 ) = [ 0.5 0; 0 0.1 ]; B( :, DIAMOND, 2) = [ 1; 2 ];
M( :, :, DIAMOND, 3 ) = [ 0.5 0; -0.4 0.1 ]; B( :, DIAMOND,3 ) = [ 1; 2.8 ];
M( :, :, DIAMOND, 4 ) = [ 0.5 0; 0 0.1 ]; B( :, DIAMOND, 4) = [ -1; 2 ];
M( :, :, DIAMOND, 5 ) = [ 0.5 0; 0.4 0.1 ]; B( :, DIAMOND,5 ) = [ -1; 2.8 ];
M( :, :, DIAMOND, 6 ) = [ 0.5 0; -0.4 0.1 ]; B( :, DIAMOND,6 ) = [ -1; 1.2 ];
M( :, :, DIAMOND, 7 ) = [ 0 0.1; 0.4 0 ]; B( :, DIAMOND, 7) = [ -0.22; 1.42 ];
M( :, :, DIAMOND, 8 ) = [ 0 0.1; 0.4 0 ]; B( :, DIAMOND, 8) = [ -0.22; 3.02 ];
m( DIAMOND ) = 8;
axis( [ -3 3 -10 10 ] );
fn = DIAMOND;%задаём тип фрактала
n = 50000; %количество точек
15
X = zeros( n, 20 ); %формируем массив под первую координату
Y = zeros( n, 20 ); %формируем массив под вторую координату
Pos = [ 0.5; 0.5 ]; %задаем координаты начальной точки
for i = 1:n
sum = 0;
r = rand;
for j = 1:m( fn )%выбираем одно из четырех афинных
преобразований.
if ( ( r >= sum ) && ( r < sum + P( fn, j ) ) )
Pos = M( :, :, fn, j ) * Pos + B( :, fn, j );
end
sum = sum + P( fn, j );
end
X( i, fn ) = Pos( 1 );
Y( i, fn ) = Pos( 2 );
end
plot( X( :, fn ), Y( :, fn ), '.g','MarkerSize', 1 )

Я нашел алгоритм для ДСИФ, но не понимаю, что должно стоять в Trans и Shape и матлаб выдает ошибку на 2 строку IFS(trans,shape,n)- пишет Недостаточно входных аргументов.

function p = IFS(trans,shape,n)
IFS(trans,shape,n)
%
% function returns points generated by IFS
%
% trans - list of affine transformations
% shape - starting shape
% n - number of iterations
%
%
% example:
n = 10;
trans = {[0.4194 0.3629 -0.0000; 0.0376 0.3306 0.0000; 0 0 1.0000],[0.5645 -0.2903 0; 0.0699 0.1855 0.0000; 0.8500 0.8250 1.0000]};
shape = [0 0 1; 1 0 1; 0.5 1 1];
temp = shape;
[iw,ik] = size(temp);
tr = size(trans,2);
len = length(trans);

temp1 = zeros(iw,ik*len^n);
w = 1;
for i = 1:n
k = 1;
for j = 1:tr
for m = 1:w
temp1(:,1+(k-1)*ik:ik+(k-1)*ik) = temp(:,1+(m-1)*ik:ik+(m-1)*ik) * trans{j};
k = k + 1;
end
end
w = w * len;
temp = temp1(:,1:ik*w);
end

p = temp;