Matlab 3D绘图如何为轨迹添加各侧面2D透视投影阴影/倒影
Matlab 3D轨迹添加坐标面投影阴影实现方法
实现逻辑很简单:你需要的三个侧面2D投影阴影,本质是将原始3D轨迹分别投影到XY、XZ、YZ三个坐标平面上,固定投影平面对应的第三维坐标为坐标轴范围的边界值,用浅灰色半透明线条绘制即可模拟阴影效果。
完整可运行代码如下:
a = 1.; b = 0.3; c = 0.3; b1 = 0.008; b2 = 0.008; b3 = 0.002; c1 = 0.004; c2 = 0.0045; eta = [50 20 20]; F = @(t,y) [a*y(1) - b1*y(1)*y(2)-b2*y(1)*y(3)- b3* y(1)*y(1) ; -b*y(2) + c1*y(1)*y(2); -c*y(3) + c2*y(1)*y(3)]; [t,y] = ode45(F,[0: (300/1000000): 300], eta); % 绘制原始3D轨迹 plot3(y(:,1),y(:,2),y(:,3), 'color', 'blue','LineWidth',2) grid on; hold on; % 开启画布叠加绘制,避免覆盖原有图像 % 获取当前坐标轴范围,保证投影刚好贴在坐标面边界 ax = gca; x_lim = ax.XLim; y_lim = ax.YLim; z_lim = ax.ZLim; % 投影到XY底面(z固定为z轴最小值) plot3(y(:,1), y(:,2), repmat(z_lim(1), size(y,1), 1), 'Color', [0.5 0.5 0.5 0.6], 'LineWidth', 1.5); % 投影到XZ右侧面(y固定为y轴最大值) plot3(y(:,1), repmat(y_lim(2), size(y,1), 1), y(:,3), 'Color', [0.5 0.5 0.5 0.6], 'LineWidth', 1.5); % 投影到YZ右侧面(x固定为x轴最大值) plot3(repmat(x_lim(2), size(y,1), 1), y(:,2), y(:,3), 'Color', [0.5 0.5 0.5 0.6], 'LineWidth', 1.5); hold off; view(3) % 保持3D视角
效果和你提供的参考图逻辑一致:
你可以根据需求调整投影线的颜色、透明度(Color参数第四个值为透明度,0为完全透明,1为完全不透明)、线条粗细,或者修改投影固定的坐标轴边界值(比如把z_lim(1)改成z_lim(2)就可以把XY面投影放到顶面)。
内容的提问来源于stack exchange,提问作者MathMath
相关产品推荐
相关产品推荐

