Фигуры Лиссажу — траектории, прочерчиваемые точкой, совершающей одновременно два гармонических колебания в двух взаимно перпендикулярных направлениях.

Скопируйте один из шариков и переименуйте этот файл в blue.png

Рис. 2. Изображения шариков в png формате.

<table border="1" align="center">
<tbody>
<tr>
<td align="center" width="500" height="500">
	<canvas id="cnvs" width="500" height="500"></canvas>
	<div id="dot1" style="position: relative; height: 50px; width: 50px; left: 177.998px; top: -217.516px;">
		<img src='blue.png'>
	</div>
</td>
<td align="center" width="280"> 
<form name="For01" method="post" action="JavaScript:
	lissajou();
	void(0);"> 
Амплитуда A = <input type="text" size="4" value="200"> м<br> 
Амплитуда B = <input type="text" size="4" value="200"> м<br> 
Частота колебаний ω<sub>1</sub> = <input type="text" size="4" value="3"> рад/с<br> 
Частота колебаний ω<sub>2</sub> = <input type="text" size="4" value="5"> рад/с<br> 
Разность фаз φ = <input type="text" size="4" value="0"> рад<br><br> 
<input type="submit" value="Применить"> 
</form> 
</td>
</tr>
</tbody>
</table>
 
<script language="javascript" type="text/javascript"> 

//Определение переменных 
t=0;
dt=0.01;
X = 0; 
Y = 0; 
dx = 250; 
dy = 250; 
dy2 = 270;
 
// Фигура Лиссажу 
function lissajou() {
	A=For01.elements[0].value;
	B=For01.elements[1].value;
	w1=For01.elements[2].value;
	w2=For01.elements[3].value;
	fi=For01.elements[4].value;
	cnvs=document.getElementById("cnvs").getContext("2d");
	cnvs.clearRect(0,0,500,500); 
	cnvs.strokeStyle="blue"; 
	cnvs.beginPath(); 
	for (t=0; t<w1+w2; t+=dt){  
		X=dx + A*Math.cos(w1*t);  
		Y=dy + B*Math.cos(w2*t+parseFloat(fi));
		cnvs.lineTo(X,Y); 
	} 
	cnvs.stroke(); 
}
 
//Перемещение шарикa 
function animate(){
	t+=dt; 
	X=A*Math.cos(w1*t); 
	Y=B*Math.cos(w2*t+parseFloat(fi)) - dy2;
	dot1.style.left = X;
	dot1.style.top = Y; 
} 

//Запуск бесконечного цикла вычисления координат шарика
lissajou();
setInterval("animate()", 20); 

</script> ​

Файл index.html

Рис. 1.