I created the base grid using the cross product, and then created a coordinate system for each of those points so that I could place height-varying points directly above them. I used this approach instead of the cross product because the cross product was producing a point of every height above every base grid point. This might have been circumvented by flattening the list.

I used a damped sinusoid to compute heights, in order to represent the ripples decaying with distance. I implemented two drops, and used the additive approach for combining waves, such that when the sinusoidal patterns simply add together when they overlap. This produces an interesting effect, as shown in the top left corner of the picture below, where destructive and constructive interference create semi-elliptical mounds within the wave pattern.