80 lines
2.0 KiB
Plaintext
80 lines
2.0 KiB
Plaintext
# Project : Animate a pendulum
|
|
|
|
load "guilib.ring"
|
|
load "stdlib.ring"
|
|
|
|
CounterMan = 1
|
|
paint = null
|
|
pi = 22/7
|
|
theta = pi/180*40
|
|
g = 9.81
|
|
l = 0.50
|
|
speed = 0
|
|
|
|
new qapp
|
|
{
|
|
win1 = new qwidget() {
|
|
setwindowtitle("Animate a pendulum")
|
|
setgeometry(100,100,800,600)
|
|
label1 = new qlabel(win1) {
|
|
setgeometry(10,10,800,600)
|
|
settext("")
|
|
}
|
|
new qpushbutton(win1) {
|
|
setgeometry(150,500,100,30)
|
|
settext("draw")
|
|
setclickevent("draw()")
|
|
}
|
|
TimerMan = new qtimer(win1)
|
|
{
|
|
setinterval(1000)
|
|
settimeoutevent("draw()")
|
|
start()
|
|
}
|
|
show()
|
|
}
|
|
exec()
|
|
}
|
|
|
|
func draw
|
|
p1 = new qpicture()
|
|
color = new qcolor() {
|
|
setrgb(0,0,255,255)
|
|
}
|
|
pen = new qpen() {
|
|
setcolor(color)
|
|
setwidth(1)
|
|
}
|
|
paint = new qpainter() {
|
|
begin(p1)
|
|
setpen(pen)
|
|
ptime()
|
|
endpaint()
|
|
}
|
|
label1 { setpicture(p1) show() }
|
|
return
|
|
|
|
func ptime()
|
|
TimerMan.start()
|
|
pPlaySleep()
|
|
sleep(0.1)
|
|
CounterMan++
|
|
if CounterMan = 20
|
|
TimerMan.stop()
|
|
ok
|
|
|
|
func pPlaySleep()
|
|
pendulum(theta, l)
|
|
pendulum(theta, l)
|
|
accel = - g * sin(theta) / l / 100
|
|
speed = speed + accel / 100
|
|
theta = theta + speed
|
|
|
|
func pendulum(a, l)
|
|
pivotx = 640
|
|
pivoty = 800
|
|
bobx = pivotx + l * 1000 * sin(a)
|
|
boby = pivoty - l * 1000 * cos(a)
|
|
paint.drawline(pivotx, pivoty, bobx, boby)
|
|
paint.drawellipse(bobx + 24 * sin(a), boby - 24 * cos(a), 24, 24)
|