# Parametric Graphic Statics with GeoGebra

Welcome back to another exploration of Graphic Statics. In my previous graphic statics tutorial, Getting Started with Graphic Statics, we learned some key concepts by drawing the form and the force diagram by hand.

That's a great way to learn. But to actually perform graphic statics studies, we need the power of a drawing program, and GeoGebra is perfect for this. In this tutorial, you will learn how to do graphic statics in GeoGebra, my tool of choice.

## Introducing GeoGebra

You can download GeoGebra here.

The interface for GeoGebra Classic 6 (almost identical to Classic 5 shown in the rest of this tutorial).

The first thing that I'd like to point out is that I am using **GeoGebra Classic 5** - I love it. It does everything except 3D printing via STL files. You certainly could use the sixth version of it. I use Classic 5. They're almost identical.

#### Helpful hints when starting any GeoGebra script:

- Options: Turn off the labelling. Choose
*“no new objects”*; otherwise, it gets very cluttered. - Increase the font size.
- Choose the language of your choice; they even have Lithuanian!

There are really very few rules that you need to know in GeoGebra. It's a children's program to learn **GEOmetry** and **alGEBRA**. It’s simply wonderful.

First, let's get the basics down. The windows up on top are shown with different main icons. Below those are a series of drop-down sub-icons. We won't use all of these sub-menus, but we will use at least 25% of them all the time. So, remember that they're under the main windows on top.

Start with the Point icon, Fig 1, which is the first drop-down under the point window, and just drop down a few points.

Fig 1. The Point tool to add a point to the canvas.

The exact location isn’t important. Immediately, you'll see the corresponding X and Y coordinates in the *Algebra* window on the left-hand side, Fig 2.

Fig 2. Points added to the 2D canvas and their coordinates in the Algebra window.

By default, we see the Algebra window to the left and the 2D geometry window to the right. There are other windows that you can access from the *View* menu, including a 3D view window. For now we’ll stick with the default windows.

Let's go to the segment menu and draw some segments between these points. The segment is under the third window from the left in Fig 3 below. Draw a few segments.

Fig 3. Line segments added between points on the 2D canvas.

Escape again, or click your mouse over to the big left Pointer icon on top, to get back to the pointer and notice what's happening now; things are tied together. Pull a point, and you will see the segments are dragged along with the point.

So now you can start to see this idea: that the segment depends on the points. The points are the parents, and the segments are the children. This next concept is kind of brutal. So brace yourselves.

If you kill the parent, you kill the children. What does that mean?

If you delete a point, its dependent children will disappear. To avoid this, ** hide it** instead of deleting it. There are two ways to hide objects: right-click and select "show object" or use the hotkey button in the Algebra window to toggle visibility, Fig 4. Avoid deleting objects you don't want to see. Hide them to prevent screen clutter, which can happen quickly.

Fig 4. Toggle item visibility in the Algebra window.

The other thing I'd like you to notice is that this Algebra window is somewhat clumsily arranged. By default, new items show up in the order of their appearance. Click on the second toggle button below the word Algebra and go to that second menu. Do this to *“sort objects by object type”*, Fig 5. We will always sort objects by type in the Algebra window, not by the order of appearance.

Fig 5. Sort objects by type in the Algebra window.

### Parameterisation in GeoGebra

We want you to start designing in ** a parametric manner** and to start to use parametric thinking. To explore parameterisation, let's set up a grid.

We will set up one point that is not parametric, and that will be point A1. Everything else will be built from this point. We call it A1 since this is where the grid line A and the grid line 1 intersect.

Now, here's the

to know in GeoGebra. Points begin with a capital letter.only rule that you really need

So, let's manually type in `A1=(0,0)`

into the input box and hit enter. We can see a new point on our canvas at location `(0,0)`

.

That's the only number that is locked or hardwired in. Everything else is parametric. Do not be tempted to hardwire a span or a load or an area. Put them in as variables, and use those variables in subsequent steps.

So, for instance, if I had spacing for my grid lines A, B and C, we should specify a SCALAR and call it spacingAB or spAB, Fig 6. Names of scalars do not require capital letters. Let's just say spAB is 7m, so `spAB = 7`

. Spacing BC is 10m so in the Input bar type `spBC = 10`

. And let's add one more spacing between gridlines C and D; for example let's say 8m, Fig. 6.

Fig 6. Defining parameters in the Algebra window.

Notice there are NO UNITS in GeoGebra, the user must be consistent with units. Notice also that variable names are CASE SENSITIVE, so if we say `spCD = 8`

, we use the uppercase and lowercase letters to help us understand our own script and make it easy to read.

Always use the Input bar at the lower part of the screen for writing a single line of code. Most of it is perfectly intuitive, and there are prompts often to guide you on subsequent steps, much like Matlab or Python. If an item is grey, the program doesn’t know what you are referring to, if it is blue, the program knows what you are referring to.

Continuing with the grid line spacing, it is best to input subsequent Points parametrically. For example, add point A2 by typing `A2 = A1 + (0, sp12)`

. As we said already, do not hardwire or “hardcode” it in! Base it on previously established terms. This is the essence of parametric thinking.

Fig 7. Add point A2 parametrically.

Similarly, other Points build off of previously established Points, Fig 8.

Fig 8. Add point C1 parametrically.

We could program all of the other gridline points in this manner. But there is a more efficient way. Use parallel and perpendicular lines to establish the other grid points. Parallel lines are located under the fourth menu window.

It is best to start by using the X axis or the Y axis and simply drop a parallel line through the points, Fig 9.

Fig 9. Establishing grid points using the parallel line tool.

If you can't find a particular item, just poke around and you'll quickly find it. But you could also think logically, what is the intersection of 2 lines? It's a point. So it's probably under the point menu. A quick look under the point, menu, and lo and behold, there's *Intersect*

The other fun thing is that you get to become really fussy about your drawings. My students are extremely fussy about their drawings, and I bet that you will become equally particular about how your drawings appear.

In the old days, we used to draw by hand and draftsmen (they were mostly men), but there must have been drafts women too, so let's call them draftspersons…they had their own style of drafting within the constraints of the building profession, but they were proud of their drawings!

You can personalise things here too. So, let's personalise the lines. Highlight all of the lines by just touching the main Line heading in the Algebra window, Fig 10. and all of the entities get highlighted.

Fig 10. Highlighting all line entities in the Algebra window.

Right-click, and you can go to object properties and change the colour and the style of the lines. I prefer to do it using the hotkey on the graphics panel, Fig 11. You can select any properties you like, I’ve made the grid lines dashed green and reduced the line weight.

Fig 11. Changing the selected line properties using the interface hot-keys.

You can select your own style conventions but I’ve adopted the following; the grid lines are lightweight, beams are heavier, and girders are even heavier.

Be sure to remember that everything is *alive*. The parametric world starts to open up to you when you realise that the only “hardwired” entity is the Point A1. Everything else is a parameter that can be adjusted.

We can hide the grid lines. Don't delete them. Remember, if you delete the parent, you kill all the children. So hit control Z if you accidentally delete something.

And again, there's 2 ways of hiding something. The fastest way is within the Algebra window by toggling the blue button. The other way is to touch it; right-click and select “show object”.

## Statics of the funicular

### Setting up the structure and loading

Now let’s go through the statics of the funicular. We start by constructing a problem to work on - we'll rebuild the structure we worked on in the previous tutorial. Our supports are simple and that we only have vertical loads, Fig 12. Remember, it doesn't matter whether the pin is on the left side and the roller is on the right or vice versa.

Fig 12. Truss structure with unknown reactions.

Now we can put some forces on our truss and just for fun, let's use a slider. Look under the Slider menu, and it's the first button. We’ll call this Force1, Fig. 13.

Fig 13. Force arrow sliders added to the 2D canvas.

Now when we draw the known loads (not the unknown reaction), it is very important to draw them to scale. This is something that my students don't know how to do until they start drawing in GeoGebra. For example, when students draw a bending moment diagram, they rarely draw it to scale.

So, how do we draw two different forces to the same scale? First of all, we need a scale. It is convenient to call it `FScale`

or `ForceScale`

if you prefer. Now, this is my technique - I think I got this from Massoud, my genius friend at Pennsylvania. The easiest way of doing it is to draw a circle and find 12 o'clock if your vector is going down.

Fig 14. Add a circle to the canvas, parameterised by centre point and radius.

The radius of the first circle is Force1/FScale, Fig 15.

Fig 15. Setting the circle radius.

I like to divide by FScale, because I can have a big number for my scale, as opposed to multiplying by a very very small number. Now, as I change the force scale I have great control over my vector length. We are looking for 12 o'clock and to find 12 o’clock you would find the intersect of the circle and a vertical line passing through the center of the circle.

Notice that the intersect not only establishes 12 o’clock, but it also finds 6 o'clock as well. What happens if you delete the 6 o'clock? You would accidentally delete the 12 o'clock, too, so don't do that. Just hide it. And now let's add a vector, a big red arrow pointing down.

Fig 16. Force arrow from 12 o’clock to the centre of the force scale.

Now we are going to get fussy. Hide the circle and the line. Even hide the little dot at the start of the vector. Let's put some *dynamic* text in. The term *“dynamic”* means that it changes in response to your parametric modelling. The text is under the Slider button. It's the second one, Fig 17.

Fig 17. Adding dynamic text to the canvas.

You can start typing words, but the key feature of the dynamic text is that it can display previously found Objects. Here, we’ll display Force1, Fig 18.

Fig 18. Dynamically displaying the magnitude of Force1 on the 2D canvas using a dynamic text element.

Remember, there are no units. You can say kN, but GeoGebra does not track units. You must keep track of them and be consistent, I stick with kN and m, or with lb and feet.

What I suggest is always test your programs. Test your scripts without going too far. What does that mean? If something was not responding to changes I made, I would stop. I would debug my program.

Next, we remember Bow's notation from the nineteenth century. Bow put letters between the forces and numbers in the interior spaces of the truss. We won't do the numbers today; let's just put letters between the loads using simple text.

Make the loads anything you want. Here, I used Force1 = 2275 and Force2 = 2150, Fig 19. Now, let's get that funicular.

Fig 19. Truss with two applied forces, drawn to scale.

### Constructing the funicular

Remember the pole from our previous tutorial; the funicular is based on the Pole and the Pole location is arbitrary. Start by creating the FORCE DIAGRAM. It is somewhere on the same page as the form diagram, i.e. the truss we just drew, Fig 20.

Fig 20. Construct the force diagram next to the form diagram.

Bow used upper case letters between forces on the form diagram and lower case letters on the force diagram, but that is not critical. What is critical is to call the first drop ForceAB. Don’t think of it as a number, think of it as drop from A to B.

Use the circle trick to find b, but now we seek 6 o’clock. Make the circle of radius Force1/FScale and establish 6 o’clock, Fig 21.

Fig 21. Locating point b on the force diagram.

Going from A to B means that we dropped $2275 \:kN$ and going from B to C means that we dropped $2150 \:kN$. Going from C to D we shoot up, but we don't know by how much yet. Going from D back up to A guarantees external equilibrium. Next, draw the Pole; it can be anywhere off of the main Force Diagram line. Now we add segments from the points to the Pole, Fig 22.

Fig 22. Points a, b and c and the arbitrarily positioned pole represented on the force diagram.

### The closing line

The next step is crucial. Refer back to the previous tutorial if you need a refresher on what the **closing line** is. We need to establish a closing line which can be thought of as the *“base”* of the funicular or the bending moment diagram.

I like to tell my students that it’s as if you are drawing a bending moment diagram on the slope of a hill, it doesn’t matter what the slope is, the distance from the ground to the diagram is the magnitude of the moment. So, the closing line is simply the *“slope of the hill”* that you are drawing on.

It is best to turn on the lines that establish the paths or *lines of action* of the external loads, Fig 23.

Fig 23. Force and force diagram, showing the lines of action of all external forces.

As we move from *a* to *b* on the force diagram, we move from zone *A* to zone *B* on the form Diagram. I suggest starting the funicular somewhere on that line that marks the beginning of zone *A*. Find a line parallel to *a-Pole* (the line between point "a" and the Pole) on the force diagram and move it over to the form diagram, Fig 24.

Fig 24. The first link in the funicular - parallel to a-Pole.

Note where that line enters into zone B. From here, start the next part of the funicular by passing a line parallel to *b-Pole* from that point, Fig 25.

Fig 25. The second link in the funicular - parallel to b-Pole.

Notice that each funicular segment must end along the line of action of each applied external load - here, the lines of action are vertical. Hide, do not delete, all extra lines and points. We add the final funicular segment parallel to *c-Pole*, Fig 26. Note that regardless of where the Pole is, the funicular is clearly established.

Fig 26. The third link in the funicular - parallel to c-Pole.

With the funicular constructed, we now need to close it by joining the start and end points of the funicular. Remember, the closing line does not need to be horizontal. Now, transfer a line parallel to the closing line, and pass it from the Pole, to the original load line on the force diagram, Fig 27.

Fig 27. Adding the funicular closing line.

#### Finding the reactions

We seek the intersection of a line parallel to the closing line that passes through the Pole with the vertical load line in the force diagram - this gives us point D, Fig 28.

Fig 28. Identifying point D on the force diagram - the right reaction.

Point D is super important because now I have completed the external equilibrium verification. What does that mean? Going from A to B on the force diagram is a known force *“jump“*. Going from B to C is another known force jump. But going from C to D is what?

It is the right reaction!

To quantify this right reaction, we can draw a real vector on the force diagram going from C to D, but then we will need the vector length multiplied by the force scale. Don’t forget to multiply by the force scale!

Fig 29. Joining C to D with a segment called RRSeg.

I’m going to represent C to D with a segment called *RRSeg*. Then, refer to the NAME of that segment to capture its length in the Input bar - and don’t forget to multiply by `Fscale`

. Remember to always use dynamic text to display your answers on the screen.

FFig 30. Use dynamic text to display the reaction obtained by multiplying the length of RRseg by the force scale.

Now, repeat the process with a new line segment between D and A to get the left-hand reaction. Of course, you could check this with algebraic statics, and you probably should do so to gain confidence in your Graphic Statics abilities as well as in your scripting abilities in GeoGebra.

## Wrapping up

I hope you enjoyed this latest dive into Graphic Statics, exploring how we can increase the speed and precision of our analysis using GeoGebra. This approach retains the magic of Graphic Statics but gives us the hyper-precision of a computer programme. This analysis is not approximate, it’s exact. Not only have we got a boost in the precision of our analysis but now it's parametric! Remember those applied force sliders…go ahead and change them and watch your entire graphical analysis update in real-time!

That’s all for this one - until next time!

A great next step would be to combine what you learned about truss analysis using graphic statics in the Edmond's previous tutorial with that you learned about GeoGebra in this tutorial. Why not contruct your own more elaborate truss structure and work through the complete analysis graphically using GeoGebra?

This will help you to really solidify your understanding of graphical structural analysis and how to perform it parametrically using Geogebra!

## Featured Tutorials and Guides

If you found this tutorial helpful, you might enjoy some of these other tutorials.

Using VIKTOR to Build a Shareable Truss Calculator App - Project Overview

Build a user-friendly analysis web app powered by OpenSeesPy and VIKTOR

Dr Seán Carroll

Getting Started with Graphic Statics

Rediscover the link between geometry and load flow with graphical structural analysis techniques.

Prof Edmond Saliklis