Shade a subset of a sphere's surface in MATLAB
我正试图生成一个半球图,该半球图的表面上有一个阴影区域,该区域受仰角和方位角的最大/最小值限制。本质上,我正在尝试重现此内容:
1 2 3 4 5 6 7 |
如果要突出显示半球的某个区域,请首先确定最小和最大方位角(水平扫描)和仰角(垂直扫描)angular。完成此操作后,获取您的
1 2 | theta = acosd(z); phi = atan2d(y, x); |
请注意,仰角/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | %// Change your ranges here minAzimuth = -90; maxAzimuth = 90; minElevation = 0; maxElevation = 45; %// Compute angles - assuming that you have already run the code for sphere %// [x,y,z] = sphere; %// x = x(11:end,:); %// y = y(11:end,:); %// z = z(11:end,:); theta = acosd(z); phi = atan2d(y, x); %%%%%// Begin highlighting logic ind = (phi >= minAzimuth & phi <= maxAzimuth) & ... (theta >= minElevation & theta <= maxElevation); % // Find those indices x2 = x; y2 = y; z2 = z; %// Make a copy of the sphere co-ordinates x2(~ind) = NaN; y2(~ind) = NaN; z2(~ind) = NaN; %// Set those out of bounds to NaN %%%%%// Draw our original sphere and then the region we want on top r = 90; surf(r.*x,r.*y,r.*z,'FaceColor','white','FaceAlpha',0.5); %// Base sphere hold on; surf(r.*x2,r.*y2,r.*z2,'FaceColor','red'); %// Highlighted portion axis equal; view(40,40); %// Adjust viewing angle for better view |
...这就是我得到的:
我已将代码模块化,因此您所需要做的就是更改代码开头定义的四个变量,并且输出将突出显示该半球的所需部分,这些部分由这些min和最大范围。
希望这会有所帮助!
一个选项是创建一个数组,该数组具有要分配给每个点的相应颜色。
一个最小的示例(使用三角函数将方位角和仰角转换为x,y和z上的逻辑条件):
1 2 3 |
产生此结果:
注意:这仅适用于网格的分辨率。 (即表面的每个"补丁"可以具有不同的颜色)。为了精确地重绘您的绘图,您可能希望将网格球与另一个网格球叠加,该球体上的网格点数量很多,您可以在上面应用上面的代码。