# (Demo) 2D Wave

Here is a simple demo that draws a cool 2D time-based wave. The wave is the superposition of several sine waves. I found the original code here.

You can find in init.lua, the function that computes the wave:

```function update_curve_v2(curve, t)
local step_angle = (2.0*PI) / curve.num_vertices
local angle = 0
local x = -curve.x_size/2.0
local x_step = curve.x_size / curve.num_vertices

for i=0, curve.num_vertices-1 do
local y = math.sin(angle * curve.frequency)
y = y + math.sin(angle * curve.frequency * 2.1 + t) * 4.5
y = y + math.sin(angle * curve.frequency * 1.72 + t*1.121) * 4.0
y = y + math.sin(angle * curve.frequency * 2.221 + t*0.437) * 5.0
y = y + math.sin(angle * curve.frequency * 3.1122 + t*4.269) * 2.5
y = y * curve.amplitude
angle = angle + step_angle
gh_polyline.set_vertex_position(curve.line, i, x, y, 0, 1)
x = x + x_step
end
end
```

where curve is a structure defined as follows:

```curve = {
line = 0, -- polyline
num_vertices = 1000,
x_size = winW * 0.9,
color = {r=91/255, g=200/255, b=1.0, a=1.0},
amplitude = 10.0,
frequency = 3.0,
}
```

In the demo, I added the possibility to tweak every parameter of the wave. Each coefficient can be changed.

I find this wave very relaxing, that’s why I decided to code this small demo. And if you need to draw a 2D curve, here is a ready-to-use template based on a polyline.