MATLAB Answers

Draw filled triangle and possibly change aspect ratio

94 views (last 30 days)
Chen
Chen on 25 May 2020
Commented: Ron on 1 Sep 2020
How can I draw a filled equilateral triangle (actually white) with background black? I don't want to have any x and y axis on the drawing. I just need the graph.
And also how can I define an aspect ratio (hight:width) of the triangle and then get the different triangles of different aspect ratio from an equilateral triangle?
I think some logic for the length of pixels should work but I could not figure out.
Thanks in adavance!!

  1 Comment

Rik
Rik on 25 May 2020
You can probably solve your question with the patch function. You only need to calculate the coordinates of the corners.

Sign in to comment.

Accepted Answer

Payas Bahade
Payas Bahade on 27 May 2020
Hi Chen,
As mentioned by Rik, you can use patch command to draw the triangles and set axes properties to get desired results. Below mentioned code will help you draw triangles with specified aspect ratio:
w=10; %width of triangle
ar=0.866; % Aspect ratio for equilateral triangle
h=ar*w;%height of triangle
x=[0 w w/2];%x coordinates of vertices
y=[0 0 h];%y coordinates of vertices
patch(x,y,'white') %plotting triangle in white color
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])
You can tweak above code to get required geometry for the triangle.
Kindly refer this documentation link to know more details on using ‘patch’ command.
Hope this helps!

  5 Comments

Show 2 older comments
Chen
Chen on 31 May 2020
Another question: How to keep the triangle always in the middle of the graph? i.e., the width from the top of the output graph to the top of the triangle is equal with width of the bottom of the output graph to the bottom of the triangle.
Thanks so much!!
Payas Bahade
Payas Bahade on 31 May 2020
You can define the axes limits in terms of triangle's width and height to get require spacing around the triangle as follows:
% setting the axes limits
xlim([-w/2 1.5*w])
ylim([-w/2 h+w/2])
And to save the output figure, you can use 'savefig' command as follows:
% saving the figure
output=gcf;
savefig(output,'Triangle.fig');
Ron
Ron on 1 Sep 2020
Hi Payas,
Can you help me please? I used the code above to create one triangle. How can I create randomly distributed 500 triangles of size 3.4 x 3.4 x 3 cm? Thank you.

Sign in to comment.

More Answers (1)

Chen
Chen on 1 Jun 2020
Edited: Chen on 1 Jun 2020
a solution by myself:
Use the logic of the pixels' positions:
function trianglePixels = ar_t_man(i)
a = zeros(150,150); %define graph size -- you can change
% will fill the triangle by value 1 (binary)
a(20,size(a,2)/2) = 1; %define position of the top point in the triangle
% -- you can change
b = 1:i*100; %how many columns in the triangle due to aspect ratio
for j = 1:size(b,2)
a(20+b(j),floor(size(a,2)/2-(50/size(b,2)*j)):floor(size(a,2)/2+(50/size(b,2)*j))) = 1; %the actual triangle
end
trianglePixels = a;
imshow(a, [])
end

  0 Comments

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!