Ejs Ch02 Introduction
Ejs Ch02 Introduction
Wolfgang Christian
and
Francisco Esquembre
Modeling-Science September 15, 2009
Modeling-Science September 15, 2009
Modeling-Science September 15, 2009
Chapter Two
Introduction to Easy Java Simulations
6 CHAPTER 2
Obviously, part of the task still depends on us. You are responsible
for providing a model for the phenomenon and for designing and selecting
an output view that shows the model’s main features. These high-level
tasks are more related to science than to programming. You are encouraged
to devote your time and energy studying the science, something that the
computer cannot do. The purpose of this chapter is to demonstrate that
this computer modeling is not only possible but can be relatively easy, with
the help of Easy Java Simulations.
Let us begin by installing Easy Java Simulations and running it. EJS is
a Java program that can be run under any operating system that supports
a Java Virtual Machine (VM). Because Java is designed to be platform
independent, the EJS user interface on Mac OS X, Unix, and Linux is
almost identical to the Windows interface shown in this book.
EJS 4.2 090901.) Uncompress this file on your computer’s hard disk
to create a directory called EJS X.x (EJS 4.2 in the example). This
directory contains everything that is needed to run EJS.1
3. Run the EJS console. Inside the newly-created EJS X.x directory,
you will find a file called EjsConsole.jar. Double-click it to run the
EJS console shown in Figure 2.1.
If double-clicking doesn’t run the console, open a system terminal win-
dow, change to the Ejs directory, and type the command: java -jar
EjsConsole.jar. You’ll need to fully qualify the java command if it is
not in your system’s PATH.
You should see the console (Figure 2.1) and the file chooser dialog of
Figure 2.2, that we will describe below, on your computer display.
The EJS console is not part of EJS, but a utility used to launch one
or several instances (copies) of EJS and to perform other EJS -related tasks.
You can use the console to customize some aspects of how EJS looks and
behaves at start up. (For instance, we changed the selection of the Look
1 In Unix-like systems, the EJS X.x directory may be uncompressed as read-only. Enable write
permissions for the EJS X.x directory and all its subdirectories.
Modeling-Science September 15, 2009
8 CHAPTER 2
and feel field to Nimbus, the latest look and feel for Windows platforms, and
launched a new instance of EJS to apply the change. You will appreciate
the new look and feel in subsequent figures.) The console also displays
EJS program information and error messages on its Output area tab, and
we will refer to it from time to time in this book. The console creates an
instance of EJS at start-up and exits automatically when you close the last
running instance of EJS. Other console features, such as its ability to process
collections of EJS models, are described in the appendices.
However, before the console can run EJS right after installation, the
file chooser displayed in Figure 2.2 will appear, letting you select the direc-
tory in the computer hard disk that you will use as your workspace. EJS
uses the concept of a workspace to organize your work. A workspace is
a directory in your hard disk where EJS stores your simulation files for a
given project. A workspace can contain an unlimited number of simulations.
Inside a workspace directory, EJS creates four subdirectories:
When you first run EJS, the console asks you to choose a workspace
directory. This must be a writable directory anywhere in your hard disk.
You can choose to use the workspace included in the distribution, i.e. the
workspace directory in the EJS X.x directory created when you unzipped
the EJS bundle. But it is recommended to create a new directory in your
usual personal directory. The file dialog that allows you to choose the
workspace has a check box that, when checked, will copy all the exam-
ples files of the distribution to the new workspace. Leave this check box
checked and you will find some subdirectories in the source directory of
your workspace which contain sample simulations. In particular, the Mod-
elingScience directory includes the EJS models described in this book.
You can create and use more than one workspace for different projects or
tasks. The console provides a selector to let you change the workspace in
use and EJS will remember the current workspace between sessions or even
if you reinstall EJS. Appendix A describes how to configure and use EJS in
a multiuser installation.
Finally, the first time you run EJS, the program will also ask you to
Modeling-Science September 15, 2009
introduce your name and affiliation (Figure 2.3). This step is optional but
recommended, since it will help you document your future simulations. You
can choose to input or modify this information later using the options icon
of EJS ’ task bar.
We are now ready to turn our attention to the EJS modeling tool,
displayed with annotations in Figure 2.4 (our first image with the Nimbus
look and feel). Despite its simple interface, EJS has all the tools needed for
a complete modeling cycle.
Figure 2.4: The Easy Java Simulations user interface with annotations.
10 CHAPTER 2
search, and save a file, configure EJS, and display program information and
help. It also provides icons to run a simulation and to package one or more
simulations in a jar file. Right-clicking on taskbar icons invokes alternative
(but related) actions that will be described as needed. The bottom part
of the interface contains an output area where EJS displays informational
messages. The central part of the interface contains the workpanels where
the modeling is done.
To understand how the Description, Model, and View workpanels work to-
gether, we inspect and run an already existing simulation. Screen shots are
no substitute for a live demonstration, and you are encouraged to follow
along on your computer as you read.
Figure 2.5: The open file dialog lets you browse your hard disk and load an
existing simulation.
Modeling-Science September 15, 2009
Click on the Open icon on the EJS taskbar. A file dialog similar
to that in Figure 2.5 appears showing the contents of your workspace’s
source directory. Go to the ModelingScience directory, and open the
Ch02 Intro subdirectory. You will find a file called MassAndSpring.xml
inside this directory. Select this file and click on the Open button of the file
dialog.
12 CHAPTER 2
page of narrative.
Figure 2.7: The description pages for the mass and spring simulation. Click
on a tab to display the page. Right-click on a tab to edit the page.
The Model workpanel is where the model is defined so that it can be con-
verted into a program by EJS. In this simulation, we study the motion of a
particle of mass m attached to one end of a massless spring of equilibrium
length L. The spring is fixed to the wall at its other end and is restricted
to move in the horizontal direction. Although the oscillating mass has a
well known analytic solution, it is useful to start with a simple harmonic
oscillator model so that our output can be compared with an exact analytic
result.
Let’s examine how we implement the mass and spring model by se-
lecting the Model radio button and examining each of its five panels.
Figure 2.8: The Model workpanel contains five subpanels. The subpanel for
the definition of mass and spring dynamical variables is displayed. Other
tabs in this subpanel define additional variables, such as the natural length
of the spring L and the energy E.
14 CHAPTER 2
digits) numbers, and String for text. We will use all these variable types in
this book, but the mass and spring model uses only variables of type double
and boolean.
The Evolution panel allows us to write the Java code that determines how
the mass and spring system evolves in time and we will use this option
frequently for models not based on ordinary differential equations (ODEs).
There is, however, a second option that allows us to enter ordinary differ-
ential equations, such as (2.3.1), without programming. EJS provides a
dedicated editor that lets us specify differential equations in a format that
resembles mathematical notation and automatically generates the correct
Java code.
Let’s see how the differential equation editor works for the mass and
spring model. Because ODE algorithms solve systems of first-order ordinary
differential equations, a higher-order equation, such as (2.3.1), must be re-
cast into a first-order system. We can do so by treating the velocity as an
independent variable which obeys its own equation:
dx
= vx (2.3.2)
dt
d vx k
= − (x − L). (2.3.3)
dt m
The need for an additional differential equation explains why we declared
the vx variable in our table of variables.
Figure 2.9: The ODE evolution panel showing the mass and spring differ-
ential equation and the numerical algorithm.
the * character to denote multiplication). Fields near the top of the editor
specify the independent variable t and the variable increment dt. Numeri-
cal algorithms approximate the exact ODE solution by advancing the state
in discrete steps and the increment determines this step size. The Prelim
button at the top-right of the editor allows us to enter preliminary code,
to perform computations prior to evaluating the equations (a circumstance
required in more complex situations than the one we treat in this exam-
ple). A dropdown menu at the bottom of the editor lets us select the ODE
solver (numerical algorithm) that advances the solution from the current
value of time, t, to the next value, t + dt. The tolerance field is greyed out
because Euler–Richardson is a fixed-step method that requires no tolerance
settings. The advanced button displays a dialog which allows us to fine-tune
the execution of this solver, though default values are usually appropriated.
Modeling-Science September 15, 2009
16 CHAPTER 2
Finally, the events field at the bottom of the panel tells us that we have not
defined any events for this differential equation. Examples with preliminary
code and events can be found in Chapter 7. The different solver algorithms
and its parameters are discussed in the EJS help.
The left-hand side of the evolution workpanel includes fields that de-
termine how smoothly and how fast the simulation runs. The frames per
second (FPS) option, which can be selected by using either a slider or an
input field, specifies how many times per second we want our simulation to
repaint the screen. The steps per display (SPD) input field specifies how
many times we want to advance (step) the model before repainting. The
current value of 20 frames per second produces a smooth animation that,
together with the prescribed value of one step per display and 0.05 for dt,
results in a simulation which runs at (approximately) real time. We will
almost always use the default setting of one step per display. However,
there are situations where the model’s graphical output consumes a signifi-
cant amount of processing power and where we want to speed the numerical
computations. In this case we can increase the value of the steps per display
parameter so that the model is advanced multiple times before the visualiza-
tion is redrawn. The Autoplay check box indicates whether the simulation
should start when the program begins. This box is unchecked so that we
can change the initial conditions before starting the evolution.
Although the mass and spring model can be solved with a simple ODE algo-
rithm, our numerical methods library contains very sophisticated algorithms
and EJS can apply these algorithms to large systems of vector differential
equations with or without discontinuous events.
Not all variables within a model are computed using an algorithm on the
Evolution workpanel. Variables can also be computed after the evolution has
been applied. We refer to variables that are computed using the evolution
Modeling-Science September 15, 2009
We say that there exists fixed relations among the model’s variables.
The Fixed relations panel shown in Figure 2.10 is used to write re-
lations among variables. Notice how easy it is to convert (2.3.4) through
(2.3.6) into Java syntax. Be sure to use the multiplication character * and
to place a semicolon at the end of each Java statement.
Figure 2.10: Fixed relations for the mass and spring model.
18 CHAPTER 2
There is a fifth panel in the Model workpanel labeled Custom. This panel
can be used to define methods (functions) that can be used throughout the
model. This panel is empty because our model currently doesn’t require
additional methods, but we will make use of this panel when we modify
our mass and spring example in Section 2.6. A custom method is not used
unless it is explicitly invoked from another workpanel.
The third Easy Java Simulations workpanel is the View. This workpanel
allows us to create a graphical interface that includes visualization, user
interaction, and program control with minimum programming. Figure 2.6
shows the view for the mass and spring model. Select the View radio button
to examine how this view is created.
The right frame of the view workpanel of EJS, shown in Figure 2.11,
contains a collection of view elements, grouped by functionality. View el-
ements are building blocks that can be combined to form a complete user
interface, and each view element is a specialized object with an on-screen
representation. To display information about a given element, click on its
icon and press the F1 key or right-click and select the Help menu item. To
create a user interface, we create a frame (window) and add elements, such
as buttons and graphs, using “drag and drop” as described in Section 2.6.
The Tree of elements shown on the left side of Figure 2.11 displays the
structure of the mass and spring user interface. Notice that the simulation
has two windows, a Frame and a Dialog, that appear on your computer
screen. These elements belong to the class of container elements whose pri-
mary purpose is to visually group (organize) other elements within the user
interface. The tree displays descriptive names and icons for these elements.
Right-click on an element of the tree to obtain a menu that helps the user
change this structure.
Figure 2.11: The View workpanel showing the Tree of elements for the mass
and spring user interface.
Notice the properties that are given constant values. The Style, Size
Modeling-Science September 15, 2009
20 CHAPTER 2
Elements can also have action properties which can be associated with
code. (Action properties have their labels displayed in red.) User actions,
such as dragging or clicking, invoke their corresponding action property,
thus providing a simple way to control the simulation. As the user drags
the mass, the code on the On Drag property restricts the motion of the shape
to the horizontal direction by setting the y variable to 0. Finally, when the
mouse button is released, the following code is executed:
Clicking on the icon next to the field displays a small editor that shows this
code.
Because the On Release action code spans more than one line, the property
field in the inspector shows a darker (green) background. Other data types,
such as boolean properties, have different editors. Clicking the second icon
displays a dialog window with a listing of variables and methods that can
be used to set the property value.
We have seen that Easy Java Simulations is a powerful tool that lets us
express our knowledge of a model at a very high level of abstraction. When
Modeling-Science September 15, 2009
modeling the mass and spring, we first created a table of variables that
describes the model and initialized these variables using a column in the
table. We then used an evolution panel with a high-level editor for systems
of first-order ordinary differential equations to specify how the state ad-
vances in time. We then wrote relations to compute the auxiliary or output
variables that can be expressed using expressions involving state variables.
Finally, the program’s graphical user interface and high-level visualizations
were created by dragging objects from the Elements palette into the Tree of
elements. Element properties were set using a properties editor and some
properties were associated with variables from the model.
It is important to note that the three lines of code on the Fixed re-
lations workpanel (Figure 2.10) and the two lines of code in the particle’s
action method are the only explicit Java code needed to implement the
model. Easy Java Simulations creates a complete Java program by pro-
cessing the information in the workpanels when the run icon is pressed as
described in Section 2.4.
It is time to run the simulation by clicking on the Run icon of the taskbar, .
EJS generates the Java code and compiles it, collects auxiliary and library
files, and executes the compiled program. All at a single mouse click.
When running a simulation, EJS changes its Run icon to red and
prints informational messages saying that the simulation has been success-
fully generated and that it is running. Notice that the two EJS windows
disappear and are replaced by new but similar windows without the (Ejs
window) suffix in their titles. These views respond to user actions. Click and
drag the particle to a desired initial horizontal position and then click on the
play/pause button. The particle oscillates about is equilibrium point and
the plot displays the displacement and velocity data as shown in Figure 2.13.
Stop the simulation and right-click the mouse over any of the draw-
Modeling-Science September 15, 2009
22 CHAPTER 2
ing areas of the simulation. In the popup menu that appears, select the
Elements options->plottingPanel->Data Tool entry to display and an-
alyze the data generated by the model. The same popup menu offers other
run-time options, such as screen capture. To exit the program, close the
simulation’s main window.
Figure 2.13: The mass and spring simulation displays an interactive drawing
of the model and a graph with displacement and velocity data.
Simulations created with EJS are stand-alone Java programs that can be
distributed without EJS for other people to use. The easiest way to do this
is to package the simulation in a single executable jar file by clicking on
the Package icon, . A file browser appears that lets you choose a name
for the self-contained jar package. The default target directory to hold this
package file is the export directory of your workspace, but you can choose
any directory and package name. The stand-alone jar file is ready to be
distributed on a CD or via the Internet. Other distribution mechanisms are
available by right-clicking on the icon as described in Appendix A.
Although the mass and spring jar file is a ready to use and to dis-
tribute Java application, an important pedagogic feature is that this jar file
is created in such a way that users can return to EJS at any time to exam-
ine, modify, and adapt the model. (EJS must, of course, be installed.) The
jar file contains a small Extensible Markup Language (XML) description of
Modeling-Science September 15, 2009
each model and right clicking on a drawing panel within the model brings
in a popup menu with an option to copy this file into EJS. This action will
extract the required files from the jar, search for the EJS installation in the
user’s hard disk, copy the files into the correct location, and run EJS with
this simulation loaded. If a model with the same name already exits, it can
be replaced. The user can then inspect, run, and modify the model just as
we are doing in this chapter. A student can, for example, obtain an example
or a template from an instructor and can later repackage the modified model
into a new jar file for submission as a completed exercise.
24 CHAPTER 2
The introduction of new force terms requires that we add variables for the
coefficient of dynamic friction and for the amplitude and frequency of the
sinusoidal driving force. Return to the Model workpanel of EJS and select
its Variables panel. Right-click on the tab of the existing page of variables
to see its popup menu, as in Figure 2.14. Select the Add a new page entry as
shown in Figure 2.14. Enter Damping and Driving Vars for the new table
name in the dialog and an empty table will appear.
We now use the new table to declare the needed variables. We could
have used the already existing tables, but declaring multiple pages helps us
organize the variables by category. Double-click on a table cell to make it
editable and navigate through the table using the arrows or tab keys. Type
b in the Name cell of the first row, and enter the value 0.1 in the Initial
value cell to its right. We don’t need to do anything else because the double
type selected is already correct. EJS checks the syntax of the value entered
and evaluates it. If we enter a wrong value, the background of the value
cell will display a pink background. Notice that when you fill in a variable
name, a new row appears automatically. Proceed similarly to declare a new
variable for the driving force’s amp with value 0.2 and for its freq with value
Modeling-Science September 15, 2009
Figure 2.15: The new table of variables for the damping and forcing terms.
Notice that we are using a method (function) named force that has not yet
been defined. We could have written an explicit expression for the sinusoidal
function. However, defining a force method promotes cleaner and more
readable code and allows us to introduce custom methods.
The force method is defined using the Custom panel of the Model. Go
to this panel and click on the empty central area to create a new page of
custom code. Name this page force. You will notice that the page is created
with a code template that defines the method. Edit this code to read:
Modeling-Science September 15, 2009
26 CHAPTER 2
Notice that we pass the time at which we want to compute the driving
force to the force method as an input parameter. Passing the time value
is very important. It would be incorrect to ask the method to use the value
of the variable t, as in:
The reason that time must be passed to the method is that time changes
throughout the evolution step. In order for the ODE solver to correctly
compute the time-dependent force throughout the evolution step, the time
must be passed into the method that computes the rate.
Variables that change (evolve) must be passed to methods that are used
to compute the rate because numerical solvers evaluate the Rate column
in the ODE workpanel at intermediate values between t and t + dt. (See
Chapter 5.) In other words, the independent variable and any other dynamic
variable which is differentiated in the State column of the ODE editor must
be passed to any method that is called in the Rate column. Variables which
remain constant during an evolution step may be used without being passed
as input parameters because the value of the variable at the beginning of
the evolution step can be used.
Go to the View workpanel and notice that the Interface palette con-
tains many subpanels. Click on the tab with the icon to display the
Windows, containers, and drawing panels palette of view elements. Click
on the icon for a plotting panel, , in this palette. You can rest (hover)
the mouse cursor over an icon to display a hint that describes the element if
Modeling-Science September 15, 2009
you have difficulty recognizing the icon. Selecting an element sets a colored
border around its icon on the palette and changes the cursor to a magic
wand, . These changes indicate that EJS is ready to create an element of
the selected type.
EJS asks for the name of the new element and then creates the element
as a child within the existing dialog. A new plot appears but the dialog
is too small. Return to the design mode (get rid of the magic wand) by
clicking on any blank area within the Tree of elements or hitting the Esc
key. Resize the dialog box by dragging its corner. You can also resize
the dialog box by double-clicking on the dialog element in the tree to
show its properties table and changing its Size property to "385,524", thus
doubling its height. Finally, edit the properties table of the newly created
plotting panel element to set the Title property to Phase Space, the Title
X property to Displacement, and the Title Y property to Velocity. (EJS
will add leading and trailing quotes to these strings to conform to the correct
Java syntax.) Set the minima and maxima for both X and Y scales to -1
and 1, respectively, and leave the other properties untouched.
The plotting panel is, as its name suggests, the container for the phase-
space plot. Phase space data are drawn in this panel using an element of
type Trail2D, . Find the Trail2D element in the 2D Drawables palette
and follow the same procedure as before. Select the Trail2D element and
create an element of this type by clicking with the magic wand on the phase
Modeling-Science September 15, 2009
28 CHAPTER 2
space panel. Finally, edit the properties of the new trail element to set its
Input X property to x - L and its Input Y property to vx. This assignment
causes the simulation to add a new (x - L,vx) point to the trace after each
evolution step, thus drawing the phase-space plot shown in Figure 2.17.
Figure 2.17: The modified simulation. The dialog includes now both a time
and a phase-space plot.
set the property field. The Format property indicates the number of
decimal digits with which to display the value of the variable.
• Repeat this process to add the amp variable to the user interface.
Now that we have changed the model and the view, we should modify the
description pages of our simulation. Go to the Description workpanel and
right-click on the tab of the first page, the one labeled Introduction, to
display the popup menu for this page. Select the Edit/View this page option.
The description page will change to edit mode, as shown in Figure 2.19, and
a simple editor will appear that provides direct access to common HTML
features.
If you prefer to use your own editor, you can copy and paste HTML
fragments from your editor into the EJS editor. If you know HTML syntax,
you can enter tagged (markup) text directly by clicking the source icon,
, in the tool bar. You can even import entire HTML pages into EJS by
right-clicking on a tab in the workpanel.
Edit the description pages as you find convenient. At least change the
discussion of the model to include the damping and driving forces. When
you are done, save the new simulation with a different name by clicking the
Save as icon of EJS ’ taskbar, . When prompted, enter a new name for
your simulation’s XML file. The modified simulation is stored in the Mas-
sAndSpringComplete.xml file in the source directory for this chapter.
Now that we have covered the basics of EJS and you know how to load,
inspect, run, and even modify an example, you may be interested in finding
more examples to see what other users have done with EJS. Maybe, you can
Modeling-Science September 15, 2009
30 CHAPTER 2
Figure 2.19: The HTML editor of EJS. The cursor points to the icon that
switches the editor into source code edition mode.
find a model that already fits your needs or that you can easily modify to
be ready for classroom use.
There are two places you can look at to find more models. The first
place to look at is the source sample directory that came with your distri-
bution of EJS. In the source directory of the distribution’s workspace you
will find some directories with sample simulations. These sample directories
were also copied to your own workspace (unless you unselected this option)
when you first run EJS.
Figure 2.20: The Digital Libraries window of EJS. Select one of the available
repositories using the combo box at the top of the window, or click the Get
catalog button to retrieve the list of models available.
If you are connected to the Internet, select the OSP collection on the
comPADRE digital library entry of the top combo box and EJS will con-
nect to the library to obtain the very latest catalog of EJS models in the
library. At the moment of this writing, there are some 160 models organized
in different categories and subcategories, and the collection is expected to
grow. As the left frame of Figure 2.21 shows, the collection is organized in
categories and subcategories. When the name of a subcategory appears in
red, double-click it to expand the node with the list of models of the sub-
category. Because many models have primary and secondary classifications,
the check box at the top, right below the library combo box, allows you
to decide whether you want the models to be listed uniquely under their
primary classification, or appear in all matching categories (thus appearing
more than once).
When you click a model node, the right frame shows information about
the model obtained instantly from the library. The information describes
the model, and includes a direct link to the comPADRE library for further
information. Double-clicking the model entry, or clicking the Download
button, will retrieve the model and auxiliary files from the library, ask you
for a place in your source directory of your workspace to download them,
Modeling-Science September 15, 2009
32 CHAPTER 2
Figure 2.21: The OSP collection on the comPADRE digital library. The
collection is organized in categories and subcategories. The entry for a
model provides information about the model.
and open the model in EJS when the download is complete. Because source
files are usually small, the download takes place almost instantly. Now, you
can inspect, run, or modify the model as we did, earlier in this chapter, for
the mass and spring model.
2.8 SUMMARY
This book is about modeling and using these models to study and display a
wide range of phenomena ranging the simple to the complex. An appropriate
way to conduct these studies is to use computer simulations, that is, to use
a computer to obtain numerical data from our models as they advance in
time, and to display this data in a form humans can understand.
Modeling-Science September 15, 2009
Modeling is both a science and an art. This book gives you a solid
starting point in the science, a coverage of the techniques required by the
art, and examples that are useful in practice.
Problem 2.1 (Energy). Add a third plotting panel to the dialog window
of the MassAndSpringComplete.xml simulation that will display the
evolution of the kinetic, potential, and total energies.
Problem 2.2 (Function plotter). The analytic solution for the undriven
simple harmonic oscillator is
x(t) = A sin(w0 t + φ) (2.9.1)
p
where A is the amplitude (maximum displacement), w0 = k/m is the
natural frequency of oscillation, and φ is the phase angle. Consult a me-
chanics textbook to determine the relationship between the amplitude and
phase angle and the initial displacement and velocity. Use the Function-
Plotter.xml simulation in the Chapter 2 directory to compare the analytic
solution to the numerical solution generated by the MassAndSpringCom-
plete.xml model.
Project 2.1 (Two-dimensional oscillator). Modify the model of the mass and
spring simulation to consider motion that is not restricted to the horizontal
direction. Assume that a second spring with spring constant k 0 produces a
vertical restoring force Fy (δy) = −k 0 δy. Modify the simulation to allow the
user to specify the Hooke’s law constants as well as the initial conditions in
both directions. Describe the motion produced without a driving force but
under different initial conditions and with different spring constants. (Try
k = 1 and k 0 = 9.) Show that it is possible to obtain circular motion if
k = k0 .
Modeling-Science September 15, 2009
34 CHAPTER 2
Project 2.2 (Simple pendulum). Create a similar simulation as the one de-
scribed in this chapter for a simple pendulum whose second-order differential
equation of motion is
d2 θ g
= − sin(θ), (2.9.2)
dt2 L
where θ is the angle of the pendulum with the vertical, g is the acceleration
due to gravity, and L is the arms’s length. Use fixed relations to compute
the x and y position of the pendulum bob using the equations:
x = L sin(θ)
y = −L cos(θ).