我试图创建一个球面直方图,但是我的数据点是纬度和经度值,所以我需要能够根据球的位置来着色一个给定的单元格区域,而不是随机地遍历索引。对于这里跳过某些方位和高度的问题,我已经得到了类似的答案: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使用来自链接post的解决方案代码并将countAz保持为常量,并且只有要更改的高程,结果如下:

反之亦然,保持CountE常数,只允许方位角改变:

似乎只允许方位角改变,保持仰角常数反而有相反的效果,通过给给定的偶氮度指数的每一标高水平着色,而当保持方位角常数时,即使理论上方位角不应改变,也存在螺旋效应。
是否有一种以更系统的方式通过仰角和方位角距离的方法,而不会导致单元格被留空?我想到的是,能够对每个以两个方位角值为界的单元进行一个高程范围的循环,然后继续到下一个仰角水平,但目前的指标体系似乎没有遵循预期的顺序,在应该是恒定的情况下导致螺旋式上升或改变海拔,这使得很难将输入的纬度和经度值分配给对应的方位值和每个内圈的仰角值。
发布于 2022-11-23 11:16:43
那是因为你另一篇文章的答案是线性指数idx错了。(编辑:不再,它被修复了)
我可以尝试解决这个问题,但是由于您自己似乎并不理解他们所做的事情(这是可以理解的),我认为在这种情况下,更详细、更清晰的代码是有好处的。我希望通过这段代码,您了解这些索引试图做什么:
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
% Get a 2x2 patch of points. Each row of the points is an elevation. Points are the intersection of the black grid.
x2=[x(countE,countAz),x(countE,countAz+1),x(countE+1,countAz),x(countE+1,countAz+1)];
y2=[y(countE,countAz),y(countE,countAz+1),y(countE+1,countAz),y(countE+1,countAz+1)];
z2=[z(countE,countAz),z(countE,countAz+1),z(countE+1,countAz),z(countE+1,countAz+1)];
x2 = reshape(x2,2,2);
y2 = reshape(y2,2,2);
z2 = reshape(z2,2,2);
random_color = rand(1,3);
surf(r*x2,r*y2,r*z2,'FaceColor',random_color, 'FaceAlpha',1);
end
endhttps://stackoverflow.com/questions/74540426
复制相似问题