Ecco il codice nella versione innocua, con l'istruzione che stressa la CPU commentata.
In questo modo si vede solo un quadratino (elettrone) che gira intorno a un quadrato più grande (nucleo), scommentando a proprio rischio l'istruzione traccia[punto++] = new riquadro('box0','img',nuovtop,nuovleft);, appaiono le orbite.
Come si vede, la creazione di nuovi elementi è effettivamente ad libitum e piuttosto imponente. Stavo proprio cercando di capire l'impegno della RAM per studiare il modo migliore di gestirlo quando mi sono accorto che era invece la CPU ad andare in crisi in modo drammatico (chissà poi perchè la CPU e non la RAM).
Comunque non sono un grande esperto di javascript e qualsiasi consiglio sarà molto apprezzato.
codice:
<html>
<head>
</head>
<body id='box0'>
<script language="JavaScript" type="text/javascript">
<!--
var vel_vert = -3; // Velocità verticale iniziale
var acc_vert = 0; // Accelerazione verticale
var deltatop = 0; // Spostamento verticale
var vel_hor = 3; // Velocità orizzontale iniziale
var acc_hor = 0; // Accelerazione orizzontale
var deltaleft = 0; // Spostamento orizzontale
var traccia = new Array();
var punto=0;
document.write('<div id = "orbitante" style="width: 8px; background: #777;');
document.write('height: 8px; top: 200px; left: 300px; position: absolute"><div></div></div>');
document.write('<div id = "nucleo" style="width: 20px; background: #000;');
document.write('height: 20px; top: 300px; left: 500px; position: absolute"></div>');
nucleo_x = 500;
nucleo_y = 300;
dist_base = 7000;
coeff = 100;
movimento();
function movimento()
{
lt = parseInt(orbitante.style.left);
ot = parseInt(orbitante.style.top);
d2 = Math.max((nucleo_y - ot)*(nucleo_y-ot)+(nucleo_x-lt)*(nucleo_x-lt),dist_base)
acc_vert = coeff*(nucleo_y-ot)/d2;
vel_vert = vel_vert + acc_vert;
deltatop = deltatop + vel_vert;
nuovtop = ot + Math.floor(deltatop);
orbitante.style.top = nuovtop;
deltatop = deltatop - Math.floor(deltatop);
acc_hor = coeff*(nucleo_x-lt)/d2;
vel_hor = vel_hor + acc_hor;
deltaleft = deltaleft + vel_hor;
nuovleft = lt + Math.floor(deltaleft);
orbitante.style.left = nuovleft ;
deltaleft = deltaleft - Math.floor(deltaleft);
// traccia[punto++] = new riquadro('box0',nuovtop,nuovleft);
setTimeout('movimento()',1);
}
function riquadro(oParent,oNuovTop,oNuovLeft)
{
var contenitore = document.getElementById(oParent);
this.riq = contenitore.appendChild(document.createElement('img'));
this.riq.style.position = 'absolute';
this.riq.style.width = 8;
this.riq.style.height = 8;
this.riq.style.left = oNuovLeft;
this.riq.style.top = oNuovTop;
this.riq.style.background = '#777'
};
//-->
</script>
</body>
</html>