ArmΒΆ

The angle of each segment is controlled with the mouseX and mouseY position. The transformations applied to the first segment are also applied to the second segment because they are inside the same pushMatrix() and popMatrix() group.

from p5 import *

x = 0
y = 0
angle1 = 0.0
angle2 = 0.0
segLength = 100

def setup():
        size(640, 360)
        stroke(255, 160)
        stroke_weight(30)

        global x, y
        x = width * 0.3
        y = height * 0.5

def draw():
        background(0)

        angle1 = (mouse_x/width - 0.5) * -PI
        angle2 = (mouse_y/height - 0.5) * PI

        with push_matrix():
                segment(x, y, angle1)
                segment(segLength, 0, angle2)

def segment(x, y, a):
        translate(x, y)
        rotate(a)
        line((0, 0), (segLength, 0))

if __name__ == '__main__':
  run()