Differences between revisions 3 and 20 (spanning 17 versions)
Revision 3 as of 2008-11-14 13:42:15
Size: 5630
Editor: anonymous
Comment: converted to 1.6 markup
Revision 20 as of 2012-05-09 02:10:02
Size: 14153
Editor: jason
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:
== Curves of Pursuit ==
by Marshall Hampton.
npi = RDF(pi)
from math import cos,sin
def rot(t):
    return matrix([[cos(t),sin(t)],[-sin(t),cos(t)]])

def pursuit(n,x0,y0,lamb,steps = 100, threshold = .01):
    paths = [[[x0,y0]]]
    for i in range(1,n):
        rx,ry = list(rot(2*npi*i/n)*vector([x0,y0]))
    oldpath = [x[-1] for x in paths]
    for q in range(steps):
        diffs = [[oldpath[(j+1)%n][0]-oldpath[j][0],oldpath[(j+1)%n][1]-oldpath[j][1]] for j in range(n)]
        npath = [[oldpath[j][0]+lamb*diffs[j][0],oldpath[j][1]+lamb*diffs[j][1]] for j in range(n)]
        for j in range(n):
        oldpath = npath
    return paths
html('<h3>Curves of Pursuit</h3>')
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]))]
        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)
Line 8: Line 51:
{{{ {{{#!sagecell
Line 78: Line 121:
{{{ {{{#!sagecell
Line 91: Line 134:
{{{ {{{#!sagecell
Line 114: Line 157:
{{{ {{{#!sagecell
Line 120: Line 163:
def _(band_number = selector(range(1,5)), current_color = Color('red')):

def _(band_number = selector(range(1,5)), current_color = Color('red'), auto_update=False):
Line 128: Line 172:

== Plot Coloring ==
by Timothy Clemans
def color_experimenter(expression=input_box('', 'Expression', str), color=Color('red')):
    if expression:
            plot(SR(expression), rgbcolor=color).show()
        except TypeError:
            print "There's a problem with your expression."

== Interactive 2D Plotting ==
by Timothy Clemans
def error_msg(msg):
    print '<html><p style="font-family:Arial, sans-serif;color:#000"><span style="color:red;font-weight:bold">Error</span>: %s</p></html>' % msg

def interactive_2d_plotter(expression=input_box('sin(x)', 'Expression', str), x_range=range_slider(-10,10,1,(0,10), label='X Range'), square=checkbox(True, 'Square'), axes=checkbox(False, 'Show Axes')):
    if expression:
            expression = SR(expression) # turn string into a Sage expression
        except TypeError:
            print error_msg('This is not an expression.')
                xmin, xmax = x_range
                if square or not axes:
                    print "var('%s')\nplot(%s).show(%s%s%s)" % (expression.variables()[0], repr(expression), 'aspect_ratio=1' if square else '', ', ' if square and not axes else '', 'axes=False' if not axes else '')
                    if square:
                        plot(expression, xmin, xmax).show(aspect_ratio=1, axes=axes)
                        plot(expression, xmin, xmax).show(axes=axes)
                    print "var('%s')\nplot(%s)" % (expression.variables()[0], repr(expression))
                    plot(expression, xmin, xmax).show(axes=axes)
        except ValueError:
            print error_msg('This expression has more than one variable.')
        except TypeError:
            print error_msg("This expression contains an unknown function.")

== Interact with matplotlib ==
# Simple example demonstrating how to interact with matplotlib directly.
# Comment plt.clf() to get the plots overlay in each update.
# Gokhan Sever & Harald Schilly (2010-01-24)

from scipy import stats
import numpy as np
import matplotlib.pyplot as plt

def plot_norm(loc=(0,(0,10)), scale=(1,(1,10))):
    rv = stats.norm(loc, scale)
    x = np.linspace(-10,10,1000)

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


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

def fun(
tex1=text_control(text1), tex2=text_control(text2), tex3=text_control(text3),
tex4=text_control('Radius of the circle. Should be a rational number with shape p/q.'),
tex5=text_control("Rate between the distance of the point to the circle's center and the radius."),
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 %'),
cir_bool=checkbox(True, "Show circles?"),
    if h=='hypotrochoid' and (b>=1 or b<=0):
        print "In a hypotrochoid, radius must be between 0 and 1."
    if h=='epitrochoid' and b<=0:
        print "In a epitrochoid, radius must be positive"
    if draw==True:
        if h=='hypotrochoid': b=-b
        if u=='Plot the curve. Slider of % below enabled.':
            if cir_bool:
        if u=='Build an animation of the plot with the number of frames specified below.':
            for a in srange(step,tMax,step):
                if cir_bool:

Sage Interactions - Graphics

goto interact main page

Curves of Pursuit

by Marshall Hampton.


Catalog of 3D Parametric Plots


Interactive rotatable raytracing with Tachyon3d


Interactive 3d plotting


Somewhat Silly Egg Painter

by Marshall Hampton (refereed by William Stein)


Plot Coloring

by Timothy Clemans


Interactive 2D Plotting

by Timothy Clemans


Interact with matplotlib




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