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
-~----------~----~----~----~------~----~------~--~---

Reply via email to