multiple 3D plane plotting

88 views (last 30 days)
BeeTiaw
BeeTiaw on 1 Apr 2024 at 1:31
Edited: Catalytic on 1 Apr 2024 at 12:45
Hi I have the following code to plot a 2D plane in 3D space.
the plane is describe by their dip angle and azimuth and the center point is at [x,y] = [0,0]
I intend to modify this code so that it can plot 3 planes in the same axis. However, the location for each plane will be varies depending on the x and y location.
planedip = 30;
planeazim = 120;
% Convert angles to radians
dip_angle_rad = deg2rad(planedip);
dip_azimuth_rad = deg2rad(360 - planeazim); % rotate from CCW to CW
% Define normal vector of plane
normal = [sin(dip_angle_rad)*cos(dip_azimuth_rad), sin(dip_angle_rad)*sin(dip_azimuth_rad), cos(dip_angle_rad)];
% Define two vectors in plane
v1 = [1, 0, (-normal(1)/normal(3))];
v2 = cross(normal, v1);
% Plot plane
x = linspace(-1,1,10);
y = linspace(-1,1,10);
[X,Y] = meshgrid(x,y);
Z = (-normal(1)*X - normal(2)*Y)/normal(3);
surf(X,Y,Z,'FaceColor',[0.5,0.5,0.5],'FaceAlpha',0.5,'EdgeColor','none');
% Add annotations
hold on
quiver3(0, 0, 0, normal(1), normal(2), normal(3));
projection = [normal(1), normal(2), 0];
quiver3(0, 0, 0, projection(1), projection(2), projection(3));
% Add dashed line
plot3([normal(1), projection(1)], [normal(2), projection(2)], [normal(3), projection(3)], '--k');
view(45,30);
axis equal
xlabel('x');
ylabel('y');
zlabel('z');

Accepted Answer

Matt J
Matt J on 1 Apr 2024 at 1:53
Edited: Matt J on 1 Apr 2024 at 1:54
Using this FEX download,
planedip = 30;
planeazim = 120;
% Convert angles to radians
dip_angle_rad = deg2rad(planedip);
dip_azimuth_rad = deg2rad(360 - planeazim); % rotate from CCW to CW
% Define normal vector of plane
normal = [sin(dip_angle_rad)*cos(dip_azimuth_rad), sin(dip_angle_rad)*sin(dip_azimuth_rad), cos(dip_angle_rad)];
ezplane([normal,0],'FaceColor','r'); grid on; hold on
ezplane([normal,+1],'FaceColor','g');
ezplane([normal,-1],'FaceColor','b'); hold off; axis auto; view(35,10)
  8 Comments
BeeTiaw
BeeTiaw on 1 Apr 2024 at 3:28
Hi, thanks! this is not what I am looking for based on the original code.
In the original code, the location Z is determined from the following lines in the code:
% Plot plane
x = linspace(-1,1,10);
y = linspace(-1,1,10);
[X,Y] = meshgrid(x,y);
Z = (-normal(1)*X - normal(2)*Y)/normal(3);
surf(X,Y,Z,'FaceColor',[0.5,0.5,0.5],'FaceAlpha',0.5,'EdgeColor','none');
whereas now, I want Z to be fix at 0.
Matt J
Matt J on 1 Apr 2024 at 10:42
Edited: Matt J on 1 Apr 2024 at 10:44
You cannot have Z=0 everywhere and also have the plane oriented according to freely chosen planedip and planeazim. Those things contradict each other. If Z=0 everywhere, then the plane normal must be [0,0,1].

Sign in to comment.

More Answers (1)

Catalytic
Catalytic on 1 Apr 2024 at 12:15
Edited: Catalytic on 1 Apr 2024 at 12:45
planedip = [30, 60 90]';
planeazim = [120, 90, 270]';
center=[2,3,0;
6,8,0;
10 15,0];
dip_angle_rad = deg2rad(planedip);
dip_azimuth_rad = deg2rad(360 - planeazim);
% Define normal vector of plane
Normals = [sin(dip_angle_rad).*cos(dip_azimuth_rad),...
sin(dip_angle_rad).*sin(dip_azimuth_rad),...
cos(dip_angle_rad)];
box=[-1 -1; -1 +1; +1 +1; +1 -1];
colors=["m","b","g"];
for i=1:numel(planedip)
P=box*null(Normals(i,:))' + center(i,:);
patch(P(:,1), P(:,2), P(:,3),colors(i));
end; hold off
axis auto; view(-65,40); grid on; axis equal
xlabel X; ylabel Y; zlabel Z;

Categories

Find more on Graphics Object Properties in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!