【发布时间】:2016-04-30 01:15:50
【问题描述】:
我正在尝试制作一个看起来像这样的冲浪图:
到目前为止我有:
x = [-1:1/100:1];
y = [-1:1/100:1];
[X,Y] = meshgrid(x,y);
Triangle1 = -abs(X) + 1.5;
Triangle2 = -abs(Y) + 1.5;
Z = min(Triangle1, Triangle2);
surf(X,Y,Z);
shading flat
colormap winter;
hold on;
[X,Y,Z] = sphere();
Sphere = surf(X, Y, Z + 1.5 );% sphere with radius 1 centred at (0,0,1.5)
hold off;
此代码生成的图形如下所示:
-
竖立一个底面为方形 ([-1,1]x[-1,1]) 且顶点位于原点 (0,0) 上方 c = 1.5 处的金字塔。
李> 金字塔的顶部被挖空,方法是移除落在以顶点为中心的半径为 r=1 的球体内的部分。
所以我需要保留金字塔内部的球体表面部分并删除其余部分。请注意,每个图中的 y 轴是不同的,这就是为什么第二个图看起来有点浓缩的原因。是的,有一个金字塔进入球体,从那个角度很难看到。
我将使用 70(方位角)和 35(仰角)的视角。并确保轴正确缩放(如图所示)。在移除球体的适当表面后,我将使用 AXIS TIGHT 选项来获得适当的尺寸。
【问题讨论】:
-
这在 MATLAB 中确实很有挑战性,它不是这种几何组合的正确工具。不是说不可能,而是没有原语可以帮助你做到这一点。您必须编写代码来执行所有计算以找出交点并适当地细分它们以获得表面。不适合胆小的人。
-
可能有另一种方法可以创建您展示的绘图,但我不确定该方法是否适合您。您可以使用平面/球体的方程来确定
z=f(x,y)形式的显式点的值。然后您可以使用meshgrid生成surf绘图的数据,该绘图应生成您显示的绘图。如果解决方案适合您,我可以生成代码 - 请告诉我。
标签: matlab matlab-figure surf