I am trying to draw a pyramid.

54 ビュー (過去 30 日間)
Michael
Michael 2013 年 12 月 7 日
回答済み: sixwwwwww 2013 年 12 月 7 日
I'm not asking you to do my homework, but guide me through what I am doing wrong. I am trying to create a function that draws a pyramid by accepting 4 inputs. The origin, the length in the x direction, width in the y direction and height in the z direction. If you run my code, you will get a pyramid but with a little extra. You will see what I mean if you run it. I tried defining the x,y, and z arrays that define the 5 faces of the pyramid.
Here's my code:
function [] = pyramid(P,l,w,h) % PYRAMID will accept four inputs. P0 is an array of 3 scalar numbers for % the origin (x, y, and z). l is the length of the box in the x-direction, % w is the width of the box in the y-direction, and h is the height of the % box in the z-direction. The functin will draw a square pyramid. % Input: Four inputs, an array of the point of origin, a length, width, and % height. % Output: A pyramid drawn with a set transparency and different colors for % the faces % Proecessing: The first thing I will do is use the figure funciton in % order to prevent any previous figures from being overwritten.
figure x = [P(1),P(1)+l,P(1)+l,P(1)]; y = [P(2),P(2),P(2)-w,P(2)-w]; z = [P(3),P(3),P(3),P(3)]; face1 = [x;y;z]; surf(face1) fill3(x,y,z,'blue') hold on x2 = [P(1),P(1)+l,P(1) + l/2]; y2 = [P(2),P(2),P(2) - w/2]; z2 = [P(3),P(3),P(3)+h]; face2 = [x2;y2;z2]; surf(face2) fill3(x2,y2,z2,'green') x3 = [P(1)+l,P(1)+l,P(1) + l/2]; y3 = [P(2),P(2)-w,P(2)- w/2]; z3 = [P(3),P(3),P(3)+h]; face3 = [x3;y3;z3]; surf(face3) fill3(x3,y3,z3,'red') x4 = [P(1)+l,P(1),P(1)+ l/2]; y4 = [P(2)-w,P(2)-w,P(2)- w/2]; z4 = [P(3),P(3),P(3)+h]; face4 = [x4;y4;z4]; surf(face4) fill3(x4,y4,z4,'green') x5 = [P(1),P(1),P(1) + l/2]; y5 = [P(2),P(2)-w,P(2)- w/2]; z5 = [P(3),P(3),P(3)+h]; face5 = [x5;y5;z5]; surf(face5) fill3(x5,y5,z5,'red') alpha(0.3) hold off end

採用された回答

sixwwwwww
sixwwwwww 2013 年 12 月 7 日
Dear Micheal, you don't need to use surf for this purpose just use fill. Below is your corrected code:
function [] = pyramid(P,l,w,h)
% PYRAMID will accept four inputs. P0 is an array of 3 scalar numbers for
% the origin (x, y, and z). l is the length of the box in the x-direction,
% w is the width of the box in the y-direction, and h is the height of the
% box in the z-direction. The functin will draw a square pyramid.
% Input: Four inputs, an array of the point of origin, a length, width, and
% height.
% Output: A pyramid drawn with a set transparency and different colors for
% the faces
% Proecessing: The first thing I will do is use the figure funciton in
% order to prevent any previous figures from being overwritten.
figure
x = [P(1),P(1)+l,P(1)+l,P(1)];
y = [P(2),P(2),P(2)-w,P(2)-w];
z = [P(3),P(3),P(3),P(3)];
fill3(x, y, z ,'blue'), hold on
x2 = [P(1),P(1)+l,P(1)+ l/2];
y2 = [P(2),P(2),P(2)-w/2];
z2 = [P(3),P(3),P(3)+h];
fill3(x2, y2, z2,'green'), hold on
x3 = [P(1)+l,P(1)+l,P(1) + l/2];
y3 = [P(2), P(2)-w,P(2)- w/2];
z3 = [P(3),P(3),P(3)+h];
fill3(x3, y3, z3,'red'), hold on
x4 = [P(1)+l,P(1),P(1)+ l/2];
y4 = [P(2)-w,P(2)-w,P(2)- w/2];
z4 = [P(3),P(3),P(3)+h];
fill3(x4,y4,z4,'green'), hold on
x5 = [P(1),P(1),P(1) + l/2];
y5 = [P(2),P(2)-w,P(2)- w/2];
z5 = [P(3),P(3),P(3)+h];
fill3(x5,y5,z5,'red')
Good luck!

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSurface and Mesh Plots についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by