In rete: http://www.elegio.it/svg/svg2014/ondulata.html

Ondulata ossia spezzata anche ad archi , non Spezzata solo a segmenti rettilinei!

Tra l'altro questa pagina può essere utile per mostrare come attivare musiche di sottofondo cliccando su immagini di grafica vettoriale SVG. Ecco un esempio:

Per un po' di musica di sottofondo clicca qui un Grande Programmatore Musicale Bach Mozart Mozart Shubert Shubert Shubert Schumann Brahms Brahms

Disegnare una spezzata tradizionale con l'elemento <path> della grafica SVG è molto facile ma lo dovrebbe essere anche il disegnare tanti archi di cerchio usando i punti dispari come punti di inizio e fine dell'arco e i punti pari come punti di controllo della curvatura dell'arco in un vettore di un numero arbitrario di punti numerati partendo da 0, non usato. Ogni punto deve essere rappresentato da un vettore di tre componenti con la componente 0, ammessa da Javascript, usata solo come commento, la componente 1 come ascissa e la componente 2 come ordinata.

Usando wxMaxima ( vedere http://www.elegio.it/max/ ) il calcolo del centro dell'arco e del suo raggio si può fare facilmente in questo modo:

Versione nel linguaggio di wxMaxima:
facerchio(B,M,C):=block(
   [bx,by,brq,cx,cy,crq,dn,ox,oy],
   bx:B[1]-M[1],
   by:B[2]-M[2],
   brq:bx*bx+by*by,
   cx:C[1]-M[1],
   cy:C[2]-M[2],
   crq:cx*cx+cy*cy,
   dn:2*(by*cx-bx*cy),
   ox:(by*crq-cy*brq)/dn,
   oy:(cx*brq-bx*crq)/dn,
   return([ox+M[1],oy+M[2],ox^2+oy^2]))$
dove B rappresenta il punto iniziale, M il punto medio e C il punto conclusivo e il risultato è l'ascissa e l'ordinata del centro dell'arco e da ultimo il quadrato del raggio dell'arco di cerchio che passa per B, M e C.

Naturalmente questa funzione richiede vari perfezionamenti per gestire la situazione in cui i tre punti dell'arco sono perfettamente allineati... col risultato di mandare all'infinito il raggio al quadrato del cerchio e il suo centro.

Versione in Javascript:
function facerchio(B,M,C){
   var bx,by,brq,cx,cy,crq,dn,ox,oy,pr=0;
   bx=B[1]-M[1];
   by=B[2]-M[2];
   brq=bx*bx+by*by;
   cx=C[1]-M[1];
   cy=C[2]-M[2];
   crq=cx*cx+cy*cy;
   dn=2*(by*cx-bx*cy);
   if(dn>=0)dn=1/(dn+1e-9);
   else dn=1/(dn-1e-9);
   ox=(by*crq-cy*brq)*dn;
   oy=(cx*brq-bx*crq)*dn;
   rr=Math.ceil(64*Math.sqrt(ox*ox+oy*oy))/64;
   if(rr>1000000)return [" L ",C[1],C[2],"","","","",""];
   if(ox*by>oy*bx)pr=1;
   return [" A ",rr,rr,0,0,pr,C[1],C[2]] }
dove B rappresenta il punto iniziale, M il punto medio e C il punto conclusivo e il risultato è l'ascissa e l'ordinata del centro dell'arco e da ultimo il quadrato del raggio dell'arco di cerchio che passa per B, M e C.

Con gli accorgimenti per impedire di avere divisioni per zero e per non usare un arco ma un segmento se il raggio di curvatura è troppo grande.

Mostra come disegnare un cerchio usando il path e il risultato della funzione facerchio(B,M,C). Uso anche una animazione senza uso di Javascript per individuare quali browser sanno gestirla correttamente... oltre, naturalmente, a Firefox che uso correntemente per realizzare questi documenti.

Come ultima considerazione sottolineo il fatto che l'uso di archi di cerchio o di segmenti consente di calcolare esattamente in modo semplice la lunghezza della ondulata e questo fatto è una caratteristica utile quando si fanno calcoli di meccanica razionale analitica ( vedere per esempio il capitolo X dedicato alla Meccanica Analitica, del Finzi-Pastori : http://www.elegio.it/doc/finzipastori/#367 ).