how to draw a 3d pyramid using patch

10 次查看(过去 30 天)
please help me sir in drawing a 3d pyramid using patch

回答(1 个)

Andreas Bernatzky
Andreas Bernatzky 2019-12-27
Hope that suits you. Did it in an Objectorientated approach because I think this can be reused easier
Some theory for patch which I have used:
For class:
classdef pyramid
%PYRAMID Summary of this class goes here
% class for drawing a simple 3D pyramid
%% Andreas Bernatzky 27.12.2019
%%
properties
cX; %centerpointX
cY; %centerpointY
cZ; %centerpointZ
p; %pyramidlength
height; %height of the pyramid
end
methods
function obj = pyramid(centerX,centerY,centerZ,pyramidBot,height)
%PYRAMID Construct an instance of this class
obj.cX = centerX;
obj.cY = centerY;
obj.cZ = centerZ;
obj.p = pyramidBot;
obj.height = height;
end
function drawPyramid(obj)
%drawPyramid
% visualise a pyramid obj
figure()
hold on
% Define the first sideFace (myDefault face) by vertices
% Face 1 vertices create manually
xFace1 = [obj.cX - obj.p; obj.cX + obj.p; obj.cX]; %xcoordinates of face1 vertices
yFace1 = [obj.cY - obj.p; obj.cY - obj.p; obj.cY]; %ycoordinates of face1 vertices
zFace1 = [obj.cZ; obj.cZ; obj.cZ + obj.height]; %zcoordinates of face1 vertices
% Face 2 vertices (create by rotation)
xFace2 = cos(pi/2) * (xFace1 - obj.cX) - sin(pi/2) * (yFace1 - obj.cY) + obj.cX; %xcoordinates of face2 vertices
yFace2 = sin(pi/2) * (xFace1 - obj.cX) + cos(pi/2) * (yFace1 - obj.cY) + obj.cY; %ycoordinates of face2 vertices
zFace2 = zFace1;%zcoordinates of face2 vertices just a copy not really needed
% Face 3 vertices (create by rotation)
xFace3 = cos(pi) * (xFace1 - obj.cX) - sin(pi) * (yFace1 - obj.cY) + obj.cX; %xcoordinates of face3 vertices
yFace3 = sin(pi) * (xFace1 - obj.cX) + cos(pi) * (yFace1 - obj.cY) + obj.cY; %ycoordinates of face3 vertices
zFace3 = zFace1;%zcoordinates of face3 vertices just a copy not really needed
% Face 4 vertices (create by rotation)
xFace4 = cos(pi + pi/2) * (xFace1 - obj.cX) - sin(pi + pi/2) * (yFace1 - obj.cY) + obj.cX; %xcoordinates of face4 vertices
yFace4 = sin(pi + pi/2) * (xFace1 - obj.cX) + cos(pi + pi/2) * (yFace1 - obj.cY) + obj.cY; %ycoordinates of face4 vertices
zFace4 = zFace1;%zcoordinates of face4 vertices just a copy not really needed
%[xcolumn,ycolumn,zcolumn]
PyramidVertices = [xFace1 yFace1 zFace1; xFace2 yFace2 zFace2; xFace3 yFace3 zFace3; xFace4 yFace4 zFace4];
PyramidFaces = [1 2 3;4 5 6; 7 8 9;10 11 12]; %connect the vertices to the faces
patch('Vertices',PyramidVertices,'Faces',PyramidFaces,'FaceColor','g');
end
end
end
Example script:
% plotting a Objectorientated pyramid
%% Andreas Bernatzky 27.12.19
%%
clear all;
close all;
% define centerpoint
x = 0;
y = 0;
z = 0;
% define length
l = 7;
% define height
h = 5;
myPyramid = pyramid(x,y,z,l,h);
myPyramid.drawPyramid();
grid on
view(3);
I attached the files too.
pyramid.PNG

类别

Help CenterFile Exchange 中查找有关 Computational Geometry 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by