Create sketch_2020_04_03b.pyde

main
villares 2020-04-04 23:52:36 -03:00
rodzic 9cece582bc
commit 49953843eb
1 zmienionych plików z 75 dodań i 0 usunięć

Wyświetl plik

@ -0,0 +1,75 @@
"""
Bézier Curves Cubic (Interactive)
https://rosettacode.org/wiki/Bitmap/B%C3%A9zier_curves/Cubic#Processing
Processing 3.4
2020-04 Alexandre Villares
Task:
Using the data storage type for raster images and a draw_line function,
draw a cubic bezier curve.
"""
# A working sketch with movable anchor and control points.
# It can be run online :
# https://www.openprocessing.org/sketch/846556/
x = [0] * 4
y = [0] * 4
permitDrag = -1
def setup() :
size(300, 300)
smooth()
# startpoint coordinates
x[0] = x[1] = 50
y[0] = 50
y[1] = y[2] = 150
x[2] = x[3] = 250
y[3] = 250
def draw() :
background(255)
noFill()
stroke(0, 0, 255)
bezier(x[1], y[1], x[0], y[0], x[3], y[3], x[2], y[2])
# the bezier handles
strokeWeight(1)
stroke(100)
line(x[0], y[0], x[1], y[1])
line(x[2], y[2], x[3], y[3])
# the anchor and control points
stroke(0)
fill(0)
for i in range(4):
if i == 0 or i == 3:
fill(255, 100, 10)
rectMode(CENTER)
rect(x[i], y[i], 5, 5)
else:
fill(0)
ellipse(x[i], y[i], 5, 5)
# permit dragging
if permitDrag >= 0:
x[permitDrag] = mouseX
y[permitDrag] = mouseY
def mouseReleased():
global permitDrag
permitDrag = -1
def mousePressed () :
global permitDrag
for i in range(4):
if (x[i]-5 <= mouseX <= x[i]+10 and
y[i]-5 <= mouseY <= y[i]+10):
permitDrag = i
break
# hand cursor when over dragging over points
def mouseMoved () :
cursor(ARROW)
for i in range(4):
if (x[i]-5 <= mouseX <= x[i]+10 and
y[i]-5 <= mouseY <= y[i]+10):
cursor(HAND)