3D векторный сюжет в Юлии - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь построить векторное поле электромагнитной волны (распространяющейся в направлении z) в Юлии.Я оглянулся, и мне кажется, что мне нужно использовать колчан, и я попробовал это с безуспешными результатами.Насколько я понимаю (x, y, z) являются источниками векторов, а (u, v, w) являются самими векторами, возникающими в точках (x, y, z).Вот то, что у меня есть, но это не дает правильного сюжета.Как я могу заставить это работать?Я открыт, чтобы попробовать и других заговорщиков.Заранее спасибо.

using Plots; gr()
t = 0; n = 100; k = 1; ω = 1; φ = π/4
x = y = w = zeros(n)
z = range(0, stop=10, length=n)
u = @. cos(k*z - ω*t)
v = @. sin(k*z - ω*t)
quiver(x, y, z, quiver=(u, v, w), projection="3d")

Output

1 Ответ

0 голосов
/ 19 апреля 2019

Я не совсем уверен, что вы хотите именно такой результат, но мне удалось заставить ваш код работать в Julia v1.1:

using PyPlot

pygui(true)

fig = figure()
ax = fig.gca(projection="3d")
t = 0; n = 100; k = 1; ω = 1; φ = π/4
x = y = w = zeros(n)
z = range(0, stop=10, length=n)
u = cos.(k*z .- ω*t)
v = sin.(k*z .- ω*t)
ax.quiver(x,y,z, u,v,w)

enter image description here

Или с цветами:

using PyPlot
using Random

function main()
    pygui(true)

    fig = figure()
    ax = fig.gca(projection="3d")
    t = 0; n = 100; k = 1; ω = 1; φ = π/4
    x = y = w = zeros(n)
    z = range(0, stop=10, length=n)
    u = cos.(k*z .- ω*t)
    v = sin.(k*z .- ω*t)
    a = ((u[1], 0.8, 0.5), (u[2], 0.8, 0.5))
    for i in 3:length(u)-2
        a = (a..., (abs(u[i]), 0.8, 0.5))
    end
    c = ((0.4, 0.5, 0.4), (0.4, 0.9, 0.4), (0.1, 0.1, 0.1))
    q = ax.quiver(x,y,z, u,v,w, color = a)
end
main()

enter image description here

...