Skip to content

Instantly share code, notes, and snippets.

@villares
Created April 21, 2022 21:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save villares/7be8ac388597c0bbcca84bb7f7a7016d to your computer and use it in GitHub Desktop.
Save villares/7be8ac388597c0bbcca84bb7f7a7016d to your computer and use it in GitHub Desktop.
follow me
# you will need http://py5.pixora.io's sketch runner for imported mode
def setup():
global first_seg
size(500, 500)
stroke_weight(9)
color_mode(HSB)
seg = Segment((100, 100), (100, 100))
for _ in range(10):
seg = Segment((100, 100), (100,100), seg)
def draw():
background(240)
Segment.segments[0].drag((mouse_x, mouse_y))
Segment.update_all()
class Segment:
segments = []
seg_length = 20
def __init__(self, start, end, link=None):
self.start = start
self.end = end
self.link = link
self.segments.append(self)
def drag(self, new_start=None):
if new_start is None and self.link is not None:
new_start = self.link.end
if new_start:
xs, ys = self.start = new_start
angle = self.angle()
xe = xs - cos(angle) * self.seg_length
ye = ys - sin(angle) * self.seg_length
self.end = xe, ye
def draw(self):
xs, ys = self.start
xe, ye = self.end
line(xs, ys, xe, ye)
def angle(self):
xs, ys = self.start
xe, ye = self.end
return atan2(ys - ye, xs - xe)
@classmethod
def update_all(cls):
for i, s in enumerate(cls.segments):
s.drag()
stroke(i * 10, 200, 100, 150)
s.draw()
def mouse_wheel(e):
Segment.seg_length += e.getCount()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment