Differences between revisions 13 and 17 (spanning 4 versions)
Revision 13 as of 2010-01-24 17:51:19
Size: 10371
Editor: GokhanSever
Comment:
Revision 17 as of 2012-04-07 04:44:22
Size: 14162
Editor: jason
Comment:
Deletions are marked like this. Additions are marked like this.
Line 9: Line 9:
{{{ {{{#!sagecell#!sagecell
Line 51: Line 51:
{{{ {{{#!sagecell
Line 121: Line 121:
{{{ {{{#!sagecell
Line 134: Line 134:
{{{ {{{#!sagecell
Line 157: Line 157:
{{{ {{{#!sagecell
Line 163: Line 163:
}}}
{{{#!sagecell
Line 174: Line 176:
{{{ {{{#!sagecell
Line 185: Line 187:
== Interactive 2d Plotting == == Interactive 2D Plotting ==
Line 187: Line 189:
{{{ {{{#!sagecell
Line 220: Line 222:
{{{ {{{#!sagecell
Line 239: Line 241:

== Spirograph ==
{{{#!sagecell
#---------------------------#
# Javier Pérez Lázaro #
# Logroño (Spain) #
# [email protected] #
#---------------------------#

#introduction

html('<h1><center>Spirograph</center></h1>')
text1='Spirograph is a tool for drawing hypotrochoids and epitrochoids.'
text2='Assume that a A is a point attached to a circle. A can be attached to the boundary of the circle or to any exterior or interior place. If the circle rolls around the outside of a fixed circle, the curve traced by the point A is called an epitrochoid. In case the circle rolls around the inside of a fixed circle, the curve is an hypotrochoid.'
text3='If the quotient between the radii of the circles is a rational number, then the curves are periodic.'

#the code

@interact
def fun(
tex1=text_control(text1), tex2=text_control(text2), tex3=text_control(text3),
h=('Select:',list(['epitrochoid','hypotrochoid'])),
tex4=text_control('Radius of the circle. Should be a rational number with shape p/q.'),
b=input_box(default=7/30,label='radius'),
tex5=text_control("Rate between the distance of the point to the circle's center and the radius."),
rate=input_box(default=1),
u=selector(['Plot the curve. Slider of % below enabled.',
'Build an animation of the plot with the number of frames specified below.'],label='Choose:'),
per=slider(0,100,1,default=100,label='graph %'),
frames=100,
cir_bool=checkbox(True, "Show circles?"),
auto_update=false):
    draw=True
    if h=='hypotrochoid' and (b>=1 or b<=0):
        print "In a hypotrochoid, radius must be between 0 and 1."
        draw=False
    if h=='epitrochoid' and b<=0:
        print "In a epitrochoid, radius must be positive"
        draw=False
    if draw==True:
        if h=='hypotrochoid': b=-b
        var('t')
        cx=(1+b)*cos(t*b/(1+b))
        cy=(1+b)*sin(t*b/(1+b))
        px=cx-b*rate*cos(t)
        py=cy-b*rate*sin(t)
        axeM=1+max([0,b+abs(b)*rate])
        if u=='Plot the curve. Slider of % below enabled.':
            tMax=pi*denominator(b/(b+1))*per/50
            L=parametric_plot((px,py),(t,0,max([0.001,tMax])),plot_points=10*rate*tMax)
            if cir_bool:
                p=point((px(t=tMax),py(t=tMax)),pointsize=30,color='blue')
                c=point((cx(t=tMax),cy(t=tMax)),pointsize=30,color='red')
                cir=circle((cx(t=tMax),cy(t=tMax)),b,color='red')
                lin=line([(cx(t=tMax),cy(t=tMax)),(px(t=tMax),py(t=tMax))])
                L+=circle((0,0),1)+cir+lin+p+c
            show(L,aspect_ratio=1,xmin=-axeM,xmax=axeM,ymin=-axeM,ymax=axeM)
        if u=='Build an animation of the plot with the number of frames specified below.':
            tMax=2*pi*denominator(b/(b+1))
            step=tMax/(frames-1)
            curva=Graphics()
            v=[]
            for a in srange(step,tMax,step):
                curva+=parametric_plot((px,py),(t,a-step,a))
                L=curva
                if cir_bool:
                    cx_a=cx(t=a)
                    cy_a=cy(t=a)
                    px_a=cx_a-b*rate*cos(a)
                    py_a=cy_a-b*rate*sin(a)
                    p=point((px_a,py_a),pointsize=30,color='blue')
                    c=point((cx_a,cy_a),pointsize=30,color='red')
                    cir=circle((cx_a,cy_a),b,color='red')
                    lin=line([(cx_a,cy_a),(px_a,py_a)])
                    L+=circle((0,0),1)+cir+lin+c+p
                v.append(L)
            animate(v,xmin=-axeM,xmax=axeM,ymin=-axeM,ymax=axeM,aspect_ratio=1).show()
}}}
{{attachment:interactive_animate_spirograph.png}}

Sage Interactions - Graphics

goto interact main page

Curves of Pursuit

by Marshall Hampton. {{{#!sagecell#!sagecell npi = RDF(pi) from math import cos,sin def rot(t):

def pursuit(n,x0,y0,lamb,steps = 100, threshold = .01):

html('<h3>Curves of Pursuit</h3>') @interact def curves_of_pursuit(n = slider([2..20],default = 5, label="# of points"),steps = slider([floor(1.4^i) for i in range(2,18)],default = 10, label="# of steps"), stepsize = slider(srange(.01,1,.01),default = .2, label="stepsize"), colorize = selector(['BW','Line color', 'Filled'],default = 'BW')):

  • outpaths = pursuit(n,0,1,stepsize, steps = steps) mcolor = (0,0,0) outer = line([q[0] for q in outpaths]+[outpaths[0][0]], rgbcolor = mcolor) polys = Graphics() if colorize=='Line color':
    • colors = [hue(j/steps,1,1) for j in range(len(outpaths[0]))]
    elif colorize == 'BW':
    • colors = [(0,0,0) for j in range(len(outpaths[0]))]
    else:
    • colors = [hue(j/steps,1,1) for j in range(len(outpaths[0]))] polys = sum([polygon([outpaths[(i+1)%n][j+1],outpaths[(i+1)%n][j], outpaths[i][j+1]], rgbcolor = colors[j]) for i in range(n) for j in range(len(outpaths[0])-1)]) #polys = polys[0] colors = [(0,0,0) for j in range(len(outpaths[0]))]
    nested = sum([line([q[j] for q in outpaths]+[outpaths[0][j]], rgbcolor = colors[j]) for j in range(len(outpaths[0]))]) lpaths = [line(x, rgbcolor = mcolor) for x in outpaths] show(sum(lpaths)+nested+polys, axes = False, figsize = [5,5], xmin = -1, xmax = 1, ymin = -1, ymax =1)

}}} pcurves.png

Catalog of 3D Parametric Plots

parametricplot3d.png

Interactive rotatable raytracing with Tachyon3d

tachyonrotate.png

Interactive 3d plotting

tachyonplot3d.png

Somewhat Silly Egg Painter

by Marshall Hampton (refereed by William Stein)

eggpaint.png

Plot Coloring

by Timothy Clemans

color_of_plot_changer.png

Interactive 2D Plotting

by Timothy Clemans

interactive_2d_plotting.png

Interact with matplotlib

matplotlib_interact.png

Spirograph

interactive_animate_spirograph.png

interact/graphics (last edited 2020-06-02 15:13:32 by kcrisman)