Thanks, much much faster! To get it to work you have to do
Pkg.add(“ApproxFun”);Pkg.checkout(“ApproxFun”);
Below is the version that works for me. Is there support for non-evenly spaced
grids? I also want to do functions on a disk. (And cylinders and spheres…not
sure how to plot those though.)
using GLPlot, GLAbstraction, ModernGL, ApproxFun
window = createdisplay(w=1000,h=1000,eyeposition=Vec3(1,1,1), lookat=Vec3(0))
function zcolor(i, j, t)
x = float32(i - 0.5)
z = float32(j - 0.5)
radius = sqrt((x * x) + (z * z))
r = sin(10.0f0 * radius + t)
g = cos(10.0f0 * radius + t)
b = radius
return Vec4(r,g,b, 1)
end
yy = xx =-1.:.05:1.
N = length(xx)
color = [zcolor(i/N, j/N, 15) for i=1:N, j=1:N];
h = 0.01
u0 = TensorFun((x,y)->exp(-10x.^2-20(y-.1).^2))
d = Interval()⊗Interval()
L = I-h^2*lap(d)
B = dirichlet(d)
S = schurfact([B,L],80)
u = Array(TensorFun,10000)
u[1] = u0
u[2] = u0
n = 2
m = 500
vals = Float64[u[1][x,y] for x in xx,y in yy]
texdata=map(Vec1,vals)
obj = glplot(texdata, primitive=SURFACE(), color=color)
# this is probably a little opaque, but texdata ends up in :z, as :z is the
default attribute for the data you upload
zvalues = obj.uniforms[:z]
# Like this you get a reference to the gpu memory object (a texture in this
case)
glClearColor(1,1,1,0)
for k=n+1:n+m
u[k] = (S\[zeros(4),2u[k-1]-u[k-2]])
vals = Float64[u[k][x,y] for x in xx,y in yy]
update!(zvalues, map(Vec1,vals)) # now you can simply update the gpu
object, which should be very efficient
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
render(obj)
yield()
GLFW.SwapBuffers(window.glfwWindow)
end
n+=m
On 2 Sep 2014, at 6:48 am, Simon Danisch <[email protected]> wrote:
> Hi,
> glad to hear that you like my package!
> I'm surprised that your code works without being very slow, as you use my (a
> little confusing) API wrong ;)
> Here is a better version:
> https://gist.github.com/SimonDanisch/794c274fbf3090f00359
> I couldn't test the code, as some functions where missing!
>
> Best,
> Simon
>
>
> Am Dienstag, 19. August 2014 07:46:22 UTC+2 schrieb Sheehan Olver:
> Hi,
>
> Is there a way to force plotting in PyPlot.jl, to simulate animation? Right
> now if I do a for loop over a sequence of plots, it only outputs the last
> plot.
>
> This is in IJulia running on OS X with matplotlib version 1.3.1 installed,
> and pygui(true)
>
> Sheehan