Сюжетная сфера с Юлией и 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)
Другие вопросы по тегам