poster
2022-10-18, 07:25
This nifty graphics gem started with a contribution by Paul Villain to the MATLAB 2022 Mini Hack, currently taking place on MATLAB Central (https://www.mathworks.com/matlabcentral/contests.html).
Contents
modfun (https://www.labfans.com/bbs/#bc213b21-2d10-4642-b5c0-bd063ce65d4c)
code (https://www.labfans.com/bbs/#d66e0b8d-1378-4fef-b0bb-420f380daacf)
Animation (https://www.labfans.com/bbs/#d2f8c556-f215-4361-89c6-dfbeb2bbe028)
Gallery (https://www.labfans.com/bbs/#7d5f14a5-3a82-40f1-9c70-c44b8d4a9a25)
Quiz (https://www.labfans.com/bbs/#cda73389-b504-46c6-b079-31572fccdde4)
modfun
Villain's contribution is 102 mod 500 (https://www.mathworks.com/matlabcentral/communitycontests/contests/5/entries/9880) . My rewrite is modfun (https://www.mathworks.com/matlabcentral/communitycontests/contests/5/entries/11093). Villain's 102 and 500 become the parameters m and n.
modfun(m,n) connects n points, z(j), equally spaced around the complex unit circle, by n+1 straight lines. The j-th line connects z(j+1) to z(mod(j*m,n)+1).code
The basic code uses complex arithmetic and is only eight lines long. When the graphics is done with line instead of plot, it is not necessary to use hold on.
function modfun(m,n) init_fig z = exp(2i*pi*(0:n)/n); for j = 0:n zj = [z(j+1),z(mod(j*m,n)+1)]; line(real(zj),imag(zj)) end endThe initialization makes line possible.
function init_fig axis([-1 1 -1 1]) axis square axis off endAnimation
This animation of modfun(105,200) has one frame for every five lines.
http://blogs.mathworks.com/cleve/files/modfun105.gif
Gallery
A sample.
http://blogs.mathworks.com/cleve/files/modfuns1.png
http://blogs.mathworks.com/cleve/files/modfuns2.png
Quiz
Match these calls to modfun to the plots in the Gallery.
modfun(88,179) modfun(89,220) modfun(99,200) modfun(101,200) modfun(111,200) modfun(113,188) modfun(126,188) modfun(126,200)
Get the MATLAB code (requires JavaScript) (javascript:grabCode_9fe1545c722d44b5acd7198948e85482())
Published with MATLAB® R2022a
More... (https://blogs.mathworks.com/cleve/2022/10/17/modfun-a-short-program-produces-impressive-graphics/?s_tid=feedtopost)
Contents
modfun (https://www.labfans.com/bbs/#bc213b21-2d10-4642-b5c0-bd063ce65d4c)
code (https://www.labfans.com/bbs/#d66e0b8d-1378-4fef-b0bb-420f380daacf)
Animation (https://www.labfans.com/bbs/#d2f8c556-f215-4361-89c6-dfbeb2bbe028)
Gallery (https://www.labfans.com/bbs/#7d5f14a5-3a82-40f1-9c70-c44b8d4a9a25)
Quiz (https://www.labfans.com/bbs/#cda73389-b504-46c6-b079-31572fccdde4)
modfun
Villain's contribution is 102 mod 500 (https://www.mathworks.com/matlabcentral/communitycontests/contests/5/entries/9880) . My rewrite is modfun (https://www.mathworks.com/matlabcentral/communitycontests/contests/5/entries/11093). Villain's 102 and 500 become the parameters m and n.
modfun(m,n) connects n points, z(j), equally spaced around the complex unit circle, by n+1 straight lines. The j-th line connects z(j+1) to z(mod(j*m,n)+1).code
The basic code uses complex arithmetic and is only eight lines long. When the graphics is done with line instead of plot, it is not necessary to use hold on.
function modfun(m,n) init_fig z = exp(2i*pi*(0:n)/n); for j = 0:n zj = [z(j+1),z(mod(j*m,n)+1)]; line(real(zj),imag(zj)) end endThe initialization makes line possible.
function init_fig axis([-1 1 -1 1]) axis square axis off endAnimation
This animation of modfun(105,200) has one frame for every five lines.
http://blogs.mathworks.com/cleve/files/modfun105.gif
Gallery
A sample.
http://blogs.mathworks.com/cleve/files/modfuns1.png
http://blogs.mathworks.com/cleve/files/modfuns2.png
Quiz
Match these calls to modfun to the plots in the Gallery.
modfun(88,179) modfun(89,220) modfun(99,200) modfun(101,200) modfun(111,200) modfun(113,188) modfun(126,188) modfun(126,200)
Get the MATLAB code (requires JavaScript) (javascript:grabCode_9fe1545c722d44b5acd7198948e85482())
Published with MATLAB® R2022a
More... (https://blogs.mathworks.com/cleve/2022/10/17/modfun-a-short-program-produces-impressive-graphics/?s_tid=feedtopost)