Triangles

Squares

Triangles

Squares

Circles

Circles

Circle Value

Triangle Value

Square Value

Clear

Lock/Release

Pentagons

Pentagons

Pentagon Value

hanger is locked

Balanced!

Unbalanced

hanger is unlocked

reset

RC = 0 (slider from 0 to 100, step 1)
B: (Corner[4] + Corner[3]) / 2
RS = 0 (slider from 0 to 100, step 1)
RT = 0 (slider from 0 to 100, step 1)
RP = 0
RN: RT + RS + RC + RP
LP = 0
LT = 0 (slider from 0 to 100, step 1)
LS = 0 (slider from 0 to 100, step 1)
LC = 0 (slider from 0 to 100, step 1)
LN: LT + LS + LC + LP
mxn = Max(LN, RN)
lng: (0.5 * (y(Corner[4]) - y(Corner[1])) / Max[(1.5 * mxn), 10])
A: B + (0, (-3 * lng))
PV = 1
CV = 1 (slider from 0 to 20, step 0.01)
SV = 1 (slider from 0 to 20, step 0.01)
TV = 1 (slider from 0 to 20, step 0.01)
lng2: 1
C: (x(A), y(A))
plyn: 5
release = false
LV: (TV * LT) + (SV * LS) + (CV * LC) + (PV * LP)
RV: (TV * RT) + (SV * RS) + (CV * RC) + (PV * RP)
Tilt = If(LV ≟ 0 ∧ RV ≟ 0, 0, (LV - RV) / (LV + RV))
wdth: x(Corner[2]) - x(Corner[1])
f = Segment(A, B)
D: A + (1 / 6 * (wdth, 0))
α: (((release * Tilt) * 60))°
D' = Rotate(D, α, A)
InputBox1 = Textfield(LT)
InputBox2 = Textfield(LS)
InputBox3 = Textfield(RT)
InputBox4 = Textfield(RS)
InputBox5 = Textfield(LC)
InputBox6 = Textfield(RC)
InputBox7 = Textfield(CV)
InputBox8 = Textfield(TV)
InputBox9 = Textfield(SV)
E: A - (1 / 6 * (wdth, 0))
E' = Rotate(E, α, A)
k = Segment(E', D')
list1 = Sequence(Segment[E' + ((i - 1) * (0, (-1.5 * lng))), E' + ((i - 1) * (0, (-1.5 * lng))) + (0, (-0.5 * lng))], i, 1, LN)
LTlist = Sequence(trw[E' + (0, (-0.5 * lng)) + ((i - 1) * (0, (-1.5 * lng))), lng], i, 1, LT)
LSlist = Sequence(sqw[E' + (0, (-0.5 * lng)) + ((i - 1) * (0, (-1.5 * lng))), lng], i, 1 + LT, LT + LS)
list2 = Sequence(Segment[D' + ((i - 1) * (0, (-1.5 * lng))), D' + ((i - 1) * (0, (-1.5 * lng))) + (0, (-0.5 * lng))], i, 1, RN)
RTlist = Sequence(trw[D' + (0, (-0.5 * lng)) + ((i - 1) * (0, (-1.5 * lng))), lng], i, 1, RT)
RSlist = Sequence(sqw[D' + (0, (-0.5 * lng)) + ((i - 1) * (0, (-1.5 * lng))), lng], i, RT + 1, RT + RS)
InputBox10 = Textfield(LP)
InputBox11 = Textfield(RP)
InputBox12 = Textfield(PV)
poly1 = Polygon(Sequence[Rotate[C, ((i * 360) * ° / plyn), C + (0, (-0.5 * lng2))], i, 1, plyn])
smp: 1
LClist = Sequence(crc[E' + (0, (-0.5 * lng)) + ((i - 1) * (0, (-1.5 * lng))), lng], i, 1 + LT + LS, LT + LS + LC)
RClist = Sequence(crc[D' + (0, (-0.5 * lng)) + ((i - 1) * (0, (-1.5 * lng))), lng], i, 1 + RT + RS, RT + RS + RC)
plyr: lng / (1 + cos((180 * ° / plyn)))
LPlist = Sequence(plyw[E' + (0, (-0.5 * lng)) + ((i - 1) * (0, (-1.5 * lng))), 5, (2 * plyr)], i, 1 + LT + LS + LC, LN)
RPlist = Sequence(plyw[D' + (0, (-0.5 * lng)) + ((i - 1) * (0, (-1.5 * lng))), 5, (2 * plyr)], i, 1 + RT + RS + RC, RN)
release_1 = false
lock_1 = true

Tool: trw
point, height
Input: E, sgm
Output: poly1

poly1, h, e, i = Polygon(E, E + (sgm * (1 / sqrt(3), -1)), E + (sgm * (-1 / sqrt(3), -1)))

Tool: sqw
point,height
Input: F, sgm
Output: poly2

poly2, j, k, l, m = Polygon(F + (sgm * (-0.5, -1)), F + (sgm * (0.5, -1)), F + (sgm * (0.5, 0)), F + (sgm * (-0.5, 0)))

Tool: crc
point, diameter
Input: E, test
Output: c

test: 1
c = Circle(E + (0, ((-test)) / 2), test / 2)

Tool: plyw
point, # sides, radius
Input: C, plyn, lng2
Output: poly1

lng2: 1
plyn: 5
poly1 = Polygon(Sequence[Rotate[C, ((i * 360) * ° / plyn), C + (0, (-0.5 * lng2))], i, 1, plyn])

Tool: trw (command trw1)
point, height
Input: E, sgm
Output: poly1

poly1, h, e, i = Polygon(E, E + (sgm * (1 / sqrt(3), -1)), E + (sgm * (-1 / sqrt(3), -1)))

Tool: sqw (command sqw1)
point,height
Input: F, sgm
Output: poly2

poly2, j, k, l, m = Polygon(F + (sgm * (-0.5, -1)), F + (sgm * (0.5, -1)), F + (sgm * (0.5, 0)), F + (sgm * (-0.5, 0)))

Tool: crc (command crc1)
point, diameter
Input: E, test
Output: c

test: 1
c = Circle(E + (0, ((-test)) / 2), test / 2)