Numworks: Bezier Curve (Using Ion Module)
Introduction
The script bezier1 plots a Bezier curve of degree 1, 2, or 3 in one of four colors: black (0), red (1), green (2), and blue (3). The script uses the ion module, which allows input directly from the keyboard.
The ion module function keydown returns True if a certain key has been pressed, otherwise, False is returned. Keys are designed by the declaration KEY_(key name). For example:
KEY_ZERO: 0 key
KEY_ONE: 1 key
KEY_TWO: 2 key
KEY_THREE: 3 key
KEY_FOUR: 4 key
KEY_FIVE: 5 key
KEY_SIX: 6 key
KEY_SEVEN: 7 key
KEY_EIGHT: 8 key
KEY_NINE: 9 key
Numworks script: bezier1.py
# Bezier Curve
# 2021-05-02 EWS
from ion import *
from math import *
from matplotlib.pyplot import *
# functions
# key press
def key():
while True:
if keydown(KEY_ONE):
return 1
if keydown(KEY_TWO):
return 2
if keydown(KEY_THREE):
return 3
# linear plot
def linbez(x0,y0,x1,y1):
xlist=[x0]
ylist=[y0]
t=0
while t<1:
t+=0.05
xlist.append(x0*(1-t)+x1*t)
ylist.append(y0*(1-t)+y1*t)
return [xlist,ylist]
# quadratic plot
def quadbez(x0,y0,x1,y1,x2,y2):
xlist=[x0]
ylist=[y0]
t=0
while t<1:
t+=0.05
x=x0*(1-t)**2+2*x1*t*(1-t)+x2*t**2
y=y0*(1-t)**2+2*y1*t*(1-t)+y2*t**2
xlist.append(x)
ylist.append(y)
return [xlist,ylist]
# cubic plot
def cubbez(x0,y0,x1,y1,x2,y2,x3,y3):
xlist=[x0]
ylist=[y0]
t=0
while t<1:
t+=0.05
x=x0*(1-t)**3+3*x1*t*(1-t)**2+3*x2*t**2*(1-t)+x3*t**3
y=y0*(1-t)**3+3*y1*t*(1-t)**2+3*y2*t**2*(1-t)+y3*t**3
xlist.append(x)
ylist.append(y)
return [xlist,ylist]
# color selection
def colsel():
print("Choose a color:")
print("0: black, 1: red \n2: green, 3: blue")
while True:
if keydown(KEY_ZERO):
return 'black'
if keydown(KEY_ONE):
return 'red'
if keydown(KEY_TWO):
return 'green'
if keydown(KEY_THREE):
return 'blue'
# main program
print("Bezier Curve Plot")
print("Order? Press 1, 2, or 3.")
n=key()
x0=float(input("x0? "))
y0=float(input("y0? "))
x1=float(input("x1? "))
y1=float(input("y1? "))
if n==1:
clist=linbez(x0,y0,x1,y1)
if n>1:
x2=float(input("x2? "))
y2=float(input("y2? "))
if n==2:
clist=quadbez(x0,y0,x1,y1,x2,y2)
if n==3:
x3=float(input("x3? "))
y3=float(input("y3? "))
clist=cubbez(x0,y0,x1,y1,x2,y2,x3,y3)
# color section
ch=colsel()
# plotting
xlist=clist[0]
ylist=clist[1]
xa=min(xlist)-1.5
xb=max(xlist)+1.5
ya=min(ylist)-1.5
yb=max(ylist)+1.5
# set axis and turn it on
axis((xa,xb,ya,yb))
axis("on")
# plot the curve
plot(xlist,ylist,color=ch)
show()
Program Size: 1995 bytes