Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
55
Task/Animate-a-pendulum/Scala/animate-a-pendulum.scala
Normal file
55
Task/Animate-a-pendulum/Scala/animate-a-pendulum.scala
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
import java.awt.Color
|
||||
import java.util.concurrent.{Executors, TimeUnit}
|
||||
|
||||
import scala.swing.{Graphics2D, MainFrame, Panel, SimpleSwingApplication}
|
||||
import scala.swing.Swing.pair2Dimension
|
||||
|
||||
object Pendulum extends SimpleSwingApplication {
|
||||
val length = 100
|
||||
|
||||
lazy val ui = new Panel {
|
||||
import scala.math.{cos, Pi, sin}
|
||||
|
||||
background = Color.white
|
||||
preferredSize = (2 * length + 50, length / 2 * 3)
|
||||
peer.setDoubleBuffered(true)
|
||||
|
||||
var angle: Double = Pi / 2
|
||||
|
||||
override def paintComponent(g: Graphics2D): Unit = {
|
||||
super.paintComponent(g)
|
||||
|
||||
val (anchorX, anchorY) = (size.width / 2, size.height / 4)
|
||||
val (ballX, ballY) =
|
||||
(anchorX + (sin(angle) * length).toInt, anchorY + (cos(angle) * length).toInt)
|
||||
g.setColor(Color.lightGray)
|
||||
g.drawLine(anchorX - 2 * length, anchorY, anchorX + 2 * length, anchorY)
|
||||
g.setColor(Color.black)
|
||||
g.drawLine(anchorX, anchorY, ballX, ballY)
|
||||
g.fillOval(anchorX - 3, anchorY - 4, 7, 7)
|
||||
g.drawOval(ballX - 7, ballY - 7, 14, 14)
|
||||
g.setColor(Color.yellow)
|
||||
g.fillOval(ballX - 7, ballY - 7, 14, 14)
|
||||
}
|
||||
|
||||
val animate: Runnable = new Runnable {
|
||||
var angleVelocity = 0.0
|
||||
var dt = 0.1
|
||||
|
||||
override def run(): Unit = {
|
||||
angleVelocity += -9.81 / length * Math.sin(angle) * dt
|
||||
angle += angleVelocity * dt
|
||||
repaint()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override def top = new MainFrame {
|
||||
title = "Rosetta Code >>> Task: Animate a pendulum | Language: Scala"
|
||||
contents = ui
|
||||
centerOnScreen()
|
||||
Executors.
|
||||
newSingleThreadScheduledExecutor().
|
||||
scheduleAtFixedRate(ui.animate, 0, 15, TimeUnit.MILLISECONDS)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue