در قسمت قبلی این سری آموزش متلب در مورد پرونده های APNG نوشتم. فایل APNG یک فایل تصویری معتبر PNG است که از ابرداده های پرونده به روشی هوشمندانه برای فشرده سازی و ذخیره فریم های یک انیمیشن کامل استفاده می کند. برای اطلاعات بیشتر در مورد این موضوع، پست قبلی را مشاهده کنید.

همین اواخر ، من یک ابزار MATLAB برای ایجاد پرونده های APNG ایجاد کردم. این در Exchange File و همچنین در GitHub موجود است. این ابزار از برنامه APNG Assember استفاده می کند که تحت شرایط مجوز جداگانه در دسترس است. این ابزار برای اولین بار که از آن استفاده می کنید، این برنامه را به طور خودکار برای شما بارگیری می کند.

در اینجا کد یک نسخه از منحنی ها را مشاهده می کنیم:

theta = 0:60:330;
P = cosd(theta) + 1i*sind(theta);
P = reshape(P,1,[]);
N = length(P);
d = 0.01;
for k = 1:1000
    V = P(end,[(2:N) 1]) - P(end,:);
    P(end+1,:) = P(end,:) + d*V;
end
hold on
for k = 1:N
    plot(real(P(:,k)),imag(P(:,k)))
end
hold off
axis equal
آموزش متلب
آموزش متلب

این روش نسبتاً ساده برای محاسبه منحنیها برای انیمیشن کردن آنها چندان مناسب نیست ، زیرا فاصله نقاط نقاط محاسبه شده با نزدیک شدن امتیازها به مرکز ، کوچکتر و کوچکتر می شود. به نظر می رسد این انیمیشن کند می شود.

بنابراین، من یک کد کوچک نوشتم تا دوباره منحنی تولید شده در بخشهای تقریباً مساوی قوس را دوباره تنظیم کنم. در اینجا به نظر می رسد

step_distance = abs(diff(P(:,1),1));
cumulative_step_distance = [0; cumsum(step_distance,1)];
max_travel_distance = cumulative_step_distance(end);
num_resampled_steps = 10000;
x = linspace(0,max_travel_distance,num_resampled_steps);
Pr = interp1(cumulative_step_distance,P,x);

و در اینجا کد برای تولید یک قاب از انیمیشن به طور همزمان وجود دارد.

num_frames = 100;
q = round(linspace(1,size(Pr,1),num_frames));

fig = gcf;
fig.Position(3:4) = 300;

frames = zeros(0,0,'uint8');
for k = 1:length(q)
    clf
    hold on
    for v = 1:N
        plot(real(Pr(1:q(k),v)),imag(Pr(1:q(k),v)))
    end
    hold off
    axis(limits)
    axis equal
    axis off
    frame = print(fig,'-r150','-RGBImage');
    frames = cat(4,frames,frame);
end

در اینجا یک بخش اضافی وجود دارد. اگرچه امروزه APNG به طور گسترده توسط مرورگرها پشتیبانی می شود ، تعداد زیادی برنامه در اطراف آن وجود دارد که فایلهای تصویری را نمایش می دهند و از اطلاعات فوق العاده انیمیشن در پرونده های APNG اطلاع ندارند. من می خواهم این بینندگان آخرین قاب انیمیشن را نشان دهند زیرا این قاب است که منحنی های کامل را شامل می شود.

frames = cat(4,frame,frames);

% Create the APNG file.
w = animatedPNGWriter('animated-pursuit-curves.png');
w.FramesPerSecond = 20;
w.SkipFirstFrame = true;
for k = 1:size(frames,4)
    addframe(w,frames(:,:,:,k));
end
finish(w);
آموزش متلب
آموزش متلب

پس مشاهده کردیم به چه راحتی می توام تصویر متحرک در متلب ایجاد کرد. برای آموزش گام به گام متلب می توانید اینجا را کلیک کنید.