Сюжетная сфера с Юлией и PyPlot
Недавно я попытался построить сферу с помощью PyPlot/Julia, и, к сожалению, это оказалось сложнее, чем я думал. Возможно, что-то не так с генерацией очков, но я не могу понять, почему моя реализация не сработала. Хотя все хорошо с оригинальным кодом Python.
Я попытался адаптировать demo2 из документа matplotlib Surface plot как MWE:
using PyPlot
u = linspace(0,2*π,100);
v = linspace(0,π,100);
x = cos(u).*sin(v);
y = sin(u).*sin(v);
z = cos(v);
surf(x,y,z)
Итак, что именно не так в моей реализации Julia?
1 ответ
Решение
x
, y
а также z
должны быть матрицы, а не векторы - иначе у вас будет только кривая, нарисованная на сфере, а не на самой поверхности.
using PyPlot
n = 100
u = linspace(0,2*π,n);
v = linspace(0,π,n);
x = cos(u) * sin(v)';
y = sin(u) * sin(v)';
z = ones(n) * cos(v)';
# The rstride and cstride arguments default to 10
surf(x,y,z, rstride=4, cstride=4)
Первоначально нарисованная кривая соответствует диагонали этих матриц.
plot( diag(x), diag(y), diag(z), color="yellow", linewidth=3 )
Это больше не работает в Julia 1.1.2 для рисования сферы. Используйте это вместо
using PyPlot
n = 100
u = range(0,stop=2*π,length=n);
v = range(0,stop=π,length=n);
x = cos.(u) * sin.(v)';
y = sin.(u) * sin.(v)';
z = ones(n) * cos.(v)';
# The rstride and cstride arguments default to 10
surf(x,y,z, rstride=4, cstride=4)