我正在尝试创建一个球形直方图,但我的数据点是纬度和经度值,因此我需要能够根据球体的位置给给定的单元格区域着色,而不是随机地遍历索引。我在这里得到了一个类似的答案,解决了我的某些方位角和海拔被跳过的问题:Coloring sections of sphere, some regions end up with unassigned colors,然而,这对于一个方位角部分具有空白长条,并且排序也不像预期的那样排序。
下面是前面的解决方案代码供参考:
n = 20;
[x,y,z] = sphere(n);
r = 1;
surf(r.*x,r.*y,r.*z,'FaceColor', 'white', 'FaceAlpha',0); %// Base sphere
hold on;
for countAz = 1:1:n
for countE = 1:1:n
% Linear index for a 2x2 patch of the matrices
idx = countAz + [0,1,n+(1:2)] + (countE-1)*n;
% Pull out the coordinates, reshape for surf
x2 = x(idx); x2 = reshape(x2,2,2);
y2 = y(idx); y2 = reshape(y2,2,2);
z2 = z(idx); z2 = reshape(z2,2,2);
random_color = rand(1,3);
surf(r*x2,r*y2,r*z2,'FaceColor',random_color, 'FaceAlpha',1);
end
end
使用链接支柱中的解决方案代码并保持countAz不变,仅更改高程,结果如下:
反之亦然,保持CountE不变,仅允许方位角改变:
看起来只允许方位角改变而保持仰角不变反而具有相反的效果,并且通过对给定方位角指数的每个仰角水平着色,并且当保持方位角不变时,即使理论上方位角不应该改变,也存在螺旋效应。
是否有一种方法可以更系统地遍历仰角和方位角范围,而不会导致单元格留空?我想的是,能够循环遍历由两个方位角值限定的每个单元格的一个仰角范围,然后继续向下遍历下一个仰角级别。但是当前的索引系统似乎没有遵循预期的顺序,导致螺旋上升或者在高度应该恒定时改变高度,使得难以将输入的纬度和经度值分配给每个内部for循环的相应方位角和仰角值。
1条答案
按热度按时间rqcrx0a61#
这是因为你的另一个帖子的答案有线性指数
idx
错误。(**编辑:**不再是了,它已经被修复)我可以尝试修复这个问题,但由于您自己似乎不了解它们的作用(这是可以理解的),我认为这是一个更详细但更清晰的代码是有益的情况。我希望通过这段代码,您了解这些索引试图做什么: