I didn't know the thickness parameter, but going the long route (frenet frames), lets you do funky stuff like setting radius = 0.2* (2+sin(6*x)), whereas thickness can be only a float.
Is there an easy way to render parametric_plot3d in Tachyon? Rado On May 7, 10:47 am, jason-s...@creativetrax.com wrote: > Rado wrote: > > Hello, > > > To test the 3D plotting abilities of sage, I tried to implement some > > basic tube plotting like the ones here > >http://facstaff.unca.edu/mcmcclur/java/LiveMathematica/tubes.html > > (mathematica handles those beautifully). > > > The code is nice and short and I think the pretty picture that comes > > out is good for SAGE posters or the show-off page in the wiki. To > > compete with mathematica all that's left is putting nicer color > > textures, but I don't know how to do that with JMOL. > > (CCing sage-support, since this seems like it would be of wider interest) > > This is nice! It's prettier than the shorter version: > > curve = vector([sin(3*x), sin(x)+2*sin(2*x), cos(x)-2*cos(2*x)]) > parametric_plot(list(curve), (x, 0, 2*pi), > thickness=30,aspect_ratio=[1,1,1]) > > Does anyone know why using the thickness keyword looks a little weird > (like balls strung together, rather than a tube)? > > You can change the color by using the 'color' keyword. There are some > predefined colors, or you can specify an RGB numeric list. > > curve = vector([sin(3*x), sin(x)+2*sin(2*x), cos(x)-2*cos(2*x)]) > parametric_plot(list(curve), (x, 0, 2*pi), > thickness=30,aspect_ratio=[1,1,1], color='red') > > Incidentally, I think the function should be changed to accept vectors, > so you don't have to put the "list" command in there to get it to plot. > > > > > #Original > > idea:http://facstaff.unca.edu/mcmcclur/java/LiveMathematica/tubes.html > > #SAGE translation: Radoslav Kirov > > > def vector_normalize(v): > > return v/sqrt(v*v) > > > x,s = var('x,s') > > curve = vector([sin(x), cos(x),0]) > > #if you are happy with the torus, try the trefoil knot > > #curve = vector([sin(3*x), sin(x)+2*sin(2*x), cos(x)-2*cos(2*x)]) > > tangent = diff(curve,x) > > unit_tangent = vector_normalize(tangent) > > normal = diff(unit_tangent,x) > > #alternative is to cross_product with a random vector. This might be > > faster but will make picture uglier. > > #you will probably, need to check that the tangent is not parallel to > > [1,1,1]. > > #test_vector = vector([1,1,1]) > > #normal = (test_vector.cross_product(unit_tangent)) > > unit_normal = vector_normalize(normal) > > unit_binormal = unit_normal.cross_product(unit_tangent) > > radius = 0.3 > > parametric_plot3d(list(curve + radius * cos(s) * unit_normal + radius > > * sin(s) * unit_binormal), (x,0,2*pi),(s,0,2*pi),aspect_ratio=[1,1,1]) > > > Also, a warning for people who come from the world of Mathematica: > > > sage: v=Vector([2,1]) > > sage: v.normalize() > > (1, 1/2) > > > I lost a good 15 min. on that. I am guessing this definition of > > normalize comes from polynomials but its quite weird for regular > > vector calculus. > > Ouch. That seems really out of place for vectors. I agree it ought to > be changed. > > Thanks, > > Jason --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-support@googlegroups.com To unsubscribe from this group, send email to sage-support-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-support URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---