How to create randomly distributed triangles
3 views (last 30 days)
Show older comments
I need to create a moving visual display consisting of 500 randomly distributed white triangles (3.4 × 3.4 × 3 cm) on a black background. The frame rate of the visual display needs to be 60 Hz, triangles move in fore-aft direction. Could you please help me figure this out? Thank you.
10 Comments
Rik
on 2 Sep 2020
You can write videos with Matlab. I have never done that before, so I would have to do the same as you: google 'write video Matlab'. You can produce each frame as an image and write it to a video file.
Syncing with an external device might be tricky though. That depends mostly on how that sync should work.
Accepted Answer
Rik
on 2 Sep 2020
Slightly editing your code gets me to a max framerate of just under 200. Results will vary for different systems.
w = 3 ;
ar=0.866; % Aspect ratio for equilateral triangle
h=ar*w;%height of triangle
p=[];origins=cell(1,10);
figure(1),clf(1)
for k=1:10
x=[0 w w/2];%x coordinates of vertices
y=[0 0 h];%y coordinates of vertices
x=x+15*rand-5;y=y+15*rand-5;%add random
p(k)= patch(x,y,'white'); %#ok<SAGROW> plotting triangle in white color
origins{k}=[mean(x) mean(y) 0];%store explicitly to prevent having to retrieve it from an object
end
set(gca,'Color','k','xticklabel',[],'yticklabel',[])%setting background black and removing labels
daspect([1 1 1]);%equal data unit length along x and y axis
xlim([-5 15]),ylim([-5 15])
rotation_per_frame_in_deg=0.8;
target_fps=60;
frametime=1/target_fps;
h_tic=tic;
for n=1:60%do 60 frames
tic
for k=1:numel(p)
rotate(p(k),[0 0 1],rotation_per_frame_in_deg,origins{k})
end
drawnow
pause(frametime-toc)%comment this line to see the max framerate
end
t=toc(h_tic);
fprintf('the fps was %.1f Hz\n',n/t)
More Answers (0)
See Also
Categories
Find more on Contour Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!