Created
April 21, 2022 21:00
-
-
Save villares/7be8ac388597c0bbcca84bb7f7a7016d to your computer and use it in GitHub Desktop.
follow me
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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