We expanded on the code from the second sketch for our visualizations. One of the main qualities we wanted to include in this iteration was the wrapping of the waves underneath the dancer. In order to achieve this, the addition of horizontal springs connecting the nodes was absolutely necessary. The position of the dancer (or in these earlier iterations, the mouse) controlled a repulsion force that would push away the nodes of the springs.
If the springs were stretched far enough, they were not rendered. This provided a base for the dancer to be framed by. The rendering algorithm went through many iterations as seen in the following figures.
Here are two videos of the early system in action, one with springs rendered (to get a better idea of how the system is working) and without.
Next, an attraction force was added into the sketch.
The system worked as expected; however, we desired more movement from the waves. In order to achieve this, the initialization of the sketch was changed to fix only the furthest left and right nodes, leaving the top and bottom nodes to travel with the force. This allowed more range of movement from the system.
One force worked smoothly. However, when the second force was added, the mesh would sometimes get tangled up. This would result in undesired spring nodes rendered with the Bezier curve, causing the black void to be covered.
In order to handle these cases, an additional check had to be made. A vector was made between the node analyzed and the previous node included in the Bezier curve. A second vector was made between the node analyzed and the user (or repulsion force) position. If the angle between these two vectors was less than PI/2.0, that spring node was not rendered. This was more effective.
Here is a video demonstration (Note: the screen capture slowed down the frame rate of the actual visual).
Here we are testing out the Processing sketch with the costume!!! I’m super concentrated… I hardly move haha.