void local fn BuildWindow window 1, @"Animated Pendulum in FutureBasic", ( 0, 0, 640, 400 ) WindowSetBackgroundColor( 1, fn ColorBlack ) WindowSetMinSize( 1, fn CGSizeMake( 640, 400 ) ) WindowSetMaxSize( 1, fn CGSizeMake( 640, 400 ) ) end fn local fn AnimatedPendulum block double theta, gravity, length, accel, speed, weight, tempo, px, py, bx, by block ColorRef color = fn ColorWithRGB( 0.164, 0.793, 0.075, 1.0 ) theta = pi/2.0 // Denominator of 2.0 = 180-degree swing, < 2.0 narrows inscribed arc, > 2.0 widens it. gravity = 9.90 // Adjusts effect of gravity on swing. Smaller values slow arc swing. length = 0.95 // Tweak for length of pendulum arm speed = 0 // Zero this or you get a propellor! px = 320 // Pivot horizontal center x point (half window width) py = 30 // Pivot y center y point from top weight = 42 // Diameter of pendulum weight tempo = 75 // Smaller value increases pendulum tempo, larger value slows it. timerbegin, 0.02, YES bx = px + length * 300 * sin(theta) // Pendulum bottom x point by = py - length * 300 * cos(theta) // Pendulum bottom y point cls pen 6.0, color line px, py to bx, by oval fill bx -weight/2, by -weight/2, weight, weight, color // Traveling weight pen 4.0 oval fill 313, 20, 16, 16, fn ColorGray // Top center point accel = gravity * sin(theta) / length / tempo speed += accel / tempo theta += speed timerEnd end fn void local fn DoDialog( ev as long, tag as long, wnd as long ) select ( ev ) case _windowWillClose : end end select end fn on dialog fn DoDialog fn BuildWindow fn AnimatedPendulum HandleEvents