Assignment: Ripples on a Pond

Assignment: Ripples on a Pond


In this assignment, you’ll create a grid of objects that adjust their heights to reflect their distance from a target point.   But rather than having a linear relationship to the distance, the heights will undulate – similar to the ripples that move across a pond when a pebble is dropped into it.


Steps to Complete

For 2 Units

Step 1 – Create a Rectangular Grid of Cylinders Elements in Dynamo

  • Create a rectangular grid of points in Dynamo to represent the pond.
  • Use integer sliders to give you the ability to change the number of points in the X and Y directions as well as the spacing between the points. Tip: Start with a relatively small grid for quicker updates as you develop your Dynamo graph. You can enlarge the grid representing the pond after you’ve debugged the programming logic.
  • Use Dynamo’s Cylinder.ByPointsRadius node to place cylinders in your Dynamo environment.
    • Use each point on your rectangular grid as a startPoint for the cylinders.
    • Create a height a value (using a Code Block or Number Slider) and use this height to create another point directly above each point on your grid. Use this second point as the endPoint for the cylinders.
    • The default radius for the cylinders is 1, but you can change that as desired.

Step 2 – Create a Point to Represent the Pebble

  • Create a point in Dynamo to represent the location where the pebble is dropped into the pond.
  • Use sliders to control and quickly flex the X and Y coordinates of the point.

Step 3 – Adjust the Heights of the Cylinders to Simulate Ripples

  • Set the height parameter of the individual cylinders in Dynamo using a sine wave that reflects their distance between the placement point of each cylinder and the location where the pebble is dropped.
    • Start by computing the distance between each of the cylinder placement points and the pebble point.
    • Use this distance as the input to a sine wave.
    • Add a slider to control the amplitude of the wave – the height of the ripples.
    • Add another slider to control the base height of the wave – a vertical offset to make sure that the computed height values for the cylinder elements are always greater than zero.

Tip 1:  You can also speed up your work by switching the updates in Dynamo from Automatic to Manual execution.  That way, you can adjust several input values and sliders to the new values, and then click Run to test them.

Tip 2:  Always be sure to save your latest graph before running a new case. That way, if Dynamo takes a very long time to complete the run or stops responding, you can crash Dynamo (using Ctrl + Alt + Del), then reopen the graph in Manual Execution mode -- which will give you the opportunity to change the inputs or logic before attempting to run the graph again.

Step 4 – Create Revit Elements that Match Your Dynamo Environment

  • Load the Mass:Cylinder family into your Revit project from the Revit Library and use the FamilyInstance.ByPoint node to place an instance at each of the grid points.Tip: Mass families are typically hidden in Revit views. To make the cylinder mass elements visible, open your 3D view (or any other views that you’re using to see the masses) and use Revit’s Visibility Graphics Overrides tool (View > Visibility Graphics Overrides) and turn on the visibility for the Masses category.
  • Set the Radius and Height parameters of each Revit element using the Element.SetParameterByName node.

For 3 Units

Step 5 – Diminish the Ripples Based on Distance from Target

  • Adapt your height calculations to have the amplitude of the ripples diminish as you move farther away from the pebble location.
    • Tip 1: Updating the heights of all the Revit cylinder elements in your grid can take a long time, so you’ll probably want to disconnect the link to the Element.SetParameterByName node that sets the height value as you work in Dynamo to refine your height calculation.
    • Tip 2: Test your new calculations and visualize the results in Dynamo first -- where the graphics are updated very quickly. Then, after your Dynamo cylinders have the behavior you want, reconnect the link to the Element.SetParameterByName node to adjust the heights of the Revit elements.
    • Tip 3: Any easy way to diminish a wave is to divide the height offset (above or below the base offset) by the distance from the pebble drop point. As the distance gets greater, the height offset computed for the wave will get smaller.

For 4 Units

Step 6 – Simulate the Effect of Dropping Two or Three Pebbles

  • Create additional points to represent the drop location for a second and third pebble and offer sliders to control the X and Y locations of each point.
  • Adapt your logic for computing the height of each cylinder to consider the waves emanating from each of the pebble locations. Tip: There’s some debate about the combined effect of waves originated from several pebble drop points:
    • Does the largest wave value dominate?
    • Or do wave values from each drop location add together -- creating a larger wave in some locations (where two positive values are added) and canceling each other in other locations (where positive and negative values are added)?
    • Or are there some other rules of physics that apply here?

You can decide which assumption you’d like to use in your model.  Just make it very clear in your graph logic about which assumption you are using and implement that decision consistently.

Extra for Experts (optional)

Suggested practice for those who want to build up their Grasshopper skills too

  • Create a similar model using Grasshopper to control geometry in Rhino. Use:
    • Cylinders to represent the pond
    • A sphere to represent the pebble
  • The programming logic can be the same. The point is to explore the similarities and differences between Dynamo and Grasshopper.


  • Please create a folder named “Module 2” within your personal folder in our Autodesk Construction Cloud project:
  • Then, upload these items to your Module 2 folder using the web interface:
    • Your Revit project (.RVT) file
    • 💡
      Please the following naming convention for your uploaded files: "#ofUnits_NameAndLastName_Module#".  For example: 4units_NicolasOrtizAbello_Module2.rvt
    • Your Dynamo environment (.DYN) file
  • Create a link to your Module 2 folder:
    • Right-click on the Module 2 folder in the file tree (at the left side of the interface) and choose Share from the pull-down menu.
    • Choose Share with Project Members, then switch to the Link tab.
    • Click the Copy button to copy the link to your clipboard.
  • Create a new posting on this Notion page — Design Journal Entry: Ripples on a Pond — including:
    • A screenshot of your model geometry
    • A few sentences describing your modeling approach
    • The link to your Module 2 folder in our Autodesk Construction Cloud project.