E-school  di  Arrigo Amadori

Calcolo numerico


Problema classico dei 3 corpi 
(interazione gravitazionale newtoniana e interazione elettrica coulombiana)

Per maggiori informazioni : 

        http://www.arrigoamadori.com/lezioni/Miscellanea/2/Problema3CorpiClassico.htm 


 parametri iniziali dei 3 corpi :

  massa : carica : posizione : velocità :
  x y z x y z
 corpo 1 : 
 corpo 2 : 
 corpo 3 : 

 costante gravitazionale :

 G =  (G>0 gravità "attrattiva" ; G=0 corpi liberi ; g<0 gravità "repulsiva")

 costante elettrica :

 E = 
(moltiplicativa (E>0 attr./rep.; E=0 corpi liberi)) 

 parametri di iterazione :


 dt = (incremento tempo) ni = (numero iterazioni)

 centro di massa :

 disegna traiettoria = (S = sì ; N = no)

 parametri di scala :

 lar = alt = (larghezza ed altezza immagine in pixel)

 xa = 0         xb = (estremi asse x)
 ya = 0         yb = (estremi asse y)
 za = 0         zb = (estremi asse z)


 

Operatori ammessi : - (per numeri negativi)  . (per numeri decimali)


Sorgenti PHP :


problemaclassico3c.php


<html>

<head>
<title>Problema classico dei 3 corpi (gravitazione newtoniana)</title>
</head>

<body>

<script language="php">

error_reporting (E_ALL ^ E_NOTICE);

//echo $G . "<p>";

// parametri in input 
//
// $gr = interazione gravitazionale newtoniana
// $el = interazione eletrrica coulombiana
// corpo 1 : $u1x0 = posizione iniziale x $u1y0 = posizione iniziale y $u1z0 = posizione iniziale z 
// corpo 2 : $u2x0 = posizione iniziale x $u2y0 = posizione iniziale y $u2z0 = posizione iniziale z 
// corpo 3 : $u3x0 = posizione iniziale x $u3y0 = posizione iniziale y $u3z0 = posizione iniziale z 
// corpo 1 : $v1x0 = velocità iniziale x $v1y0 = velocità iniziale y $v1z0 = velocità iniziale z 
// corpo 2 : $v2x0 = velocità iniziale x $v2y0 = velocità iniziale y $v2z0 = velocità iniziale z 
// corpo 3 : $v3x0 = velocità iniziale x $v3y0 = velocità iniziale y $v3z0 = velocità iniziale z 
// $G = costante gravitazionale
// $E = costante elettrica
// $m1 = massa corpo 1
// $m2 = massa corpo 2
// $m3 = massa corpo 3
// $q1 = carica corpo 1
// $q2 = carica corpo 2
// $q3 = carica corpo 3
// $cm = traiettoria centro di massa
// $lar = larghezza immgine in pixel
// $alt = altezza immagine in pixel
// $xb = fine dominio x
// $yb = fine dominio y
// $zb = fine dominio z
// $ni = numero iterazioni
// $dt = incremento tempo

//
// parametri in output
//
// crea l'immagine PNG e ne visualizza il link
//

// inserisce tutti gli include (funzioni esterne)

if (is_integer(strpos($SERVER_SOFTWARE, "Win")))
{
include("..\Routines\sgn.php");
}
else
{
include("../Routines/sgn.php");
}

// controlli vari

if ($m1 <= 0 or $m2 <= 0 or $m3 <= 0)
{
echo "Attenzione !!! Le masse devono essere positive !!!" . "<p>";
return;
}
if ($E < 0)
{
echo "Attenzione !!! Le costante elettrica deve essere positiva o nulla !!!" . "<p>";
return;
}

$cm = strtoupper($cm); //echo "aaa" . $cm . "<p>";

// parametri di scala 

$xa = 0; // inizio dominio x
$ya = 0; // inizio dominio y
$za = 0; // inizio dominio z

$dx = ($xb - $xa) / ($lar / 2 - 1); // intervallo di scomposizione asse x 
$dy = ($yb - $ya) / ($lar / 2 - 1); // intervallo di scomposizione asse y 
$dz = ($zb - $za) / ($alt / 2 - 1); // intervallo di scomposizione asse z

$alfa = atan($lar / $alt); // angolo fra asse x e parte negativa asse z
$coeff = sqrt($lar*$lar/4+$alt*$alt/4)/$xb; // coefficiente prospettico

// disegno frame con coordinate 

$im = ImageCreate ($lar + 100, $alt + 100); 

$bianco = ImageColorAllocate ($im, 255, 255, 255);
$nero = ImageColorAllocate ($im, 0, 0, 0);
$rosso = ImageColorAllocate ($im, 255, 0, 0);
$verde = ImageColorAllocate ($im, 0, 255, 0);
$blu = ImageColorAllocate ($im, 0, 0, 255);

Imageline ($im, 0, 0, $lar, 0, $bianco);
Imageline ($im, 0, $alt, $lar, $alt, $bianco);
Imageline ($im, 0, 0, 0, $alt, $bianco);
Imageline ($im, $lar, 0, $lar, $alt, $bianco);

Imageline ($im, $lar / 2, 0, $lar / 2, $alt / 2, $nero);
Imageline ($im, $lar / 2, $alt / 2, $lar, $alt / 2, $nero);
Imageline ($im, $lar / 2, $alt / 2, 0, $alt, $nero);


ImageString ($im, 1, $lar / 2, $alt / 2 + 10, $xa, $nero);
ImageString ($im, 1, 0, $alt + 10, $xb . " (x)" , $nero);
ImageString ($im, 1, $lar / 2 + 10, $lar / 2 - 10, $ya, $nero);
ImageString ($im, 1, $lar + 10, $alt / 2 - 10, $yb . " (y)", $nero);
ImageString ($im, 1, $lar / 2 - 10, $lar / 2 - 10, $za, $nero);
ImageString ($im, 1, $lar / 2 - 10, 0, $zb . " (z)", $nero);

ImageString ($im, 2, 0, $alt + 30, "traiettoria corpo 1 = colore verde", $verde);
ImageString ($im, 2, 0, $alt + 45, " .. .. corpo 2 = colore rosso", $rosso);
ImageString ($im, 2, 0, $alt + 60, " .. .. corpo 3 = colore blu", $blu);
ImageString ($im, 2, 0, $alt + 75, " .. .. centro di massa = colore nero", $nero);

// settaggio matrici valori iniziali

$u0[1]["x"] = $u1x0; $u0[1]["y"] = $u1y0; $u0[1]["z"] = $u1z0; // posizioni
$u0[2]["x"] = $u2x0; $u0[2]["y"] = $u2y0; $u0[2]["z"] = $u2z0; 
$u0[3]["x"] = $u3x0; $u0[3]["y"] = $u3y0; $u0[3]["z"] = $u3z0; 

$v0[1]["x"] = $v1x0; $v0[1]["y"] = $v1y0; $v0[1]["z"] = $v1z0; // velocità
$v0[2]["x"] = $v2x0; $v0[2]["y"] = $v2y0; $v0[2]["z"] = $v2z0; 
$v0[3]["x"] = $v3x0; $v0[3]["y"] = $v3y0; $v0[3]["z"] = $v3z0; 

// interazione gravitazionale newtoniana

if ($gr)
{
$t = 0;
for ($ii = 1; $ii <= $ni; $ii++) // iterazione
{
$t = $t + $dt; 

// disegna posizione corpo 1

$x = $u0[1]["x"]; 
$y = $u0[1]["y"]; 
$z = $u0[1]["z"];
if ($x >= -$xb and $x <= $xb and $y >= -$yb and $y <= $yb and $z >= -$zb and $z <= $zb)
{
$xx = $x - $xa;
$yy = $lar / 2 + (($y - $ya)) / $dy;
$zz = $alt / 2 - (($z - $za)) / $dz;
$yyy = $yy - $coeff * $xx * sin($alfa);
$zzz = $zz + $coeff * $xx * cos($alfa);
Imageline ($im, $yyy, $zzz, $yyy, $zzz, $verde);
}

// disegna posizione corpo 2

$x = $u0[2]["x"]; 
$y = $u0[2]["y"]; 
$z = $u0[2]["z"];
if ($x >= -$xb and $x <= $xb and $y >= -$yb and $y <= $yb and $z >= -$zb and $z <= $zb)
{
$xx = $x - $xa;
$yy = $lar / 2 + (($y - $ya)) / $dy;
$zz = $alt / 2 - (($z - $za)) / $dz;
$yyy = $yy - $coeff * $xx * sin($alfa);
$zzz = $zz + $coeff * $xx * cos($alfa);
Imageline ($im, $yyy, $zzz, $yyy, $zzz, $rosso);
}

// disegna posizione corpo 3

$x = $u0[3]["x"]; 
$y = $u0[3]["y"]; 
$z = $u0[3]["z"];
if ($x >= -$xb and $x <= $xb and $y >= -$yb and $y <= $yb and $z >= -$zb and $z <= $zb)
{
$xx = $x - $xa;
$yy = $lar / 2 + (($y - $ya)) / $dy;
$zz = $alt / 2 - (($z - $za)) / $dz;
$yyy = $yy - $coeff * $xx * sin($alfa);
$zzz = $zz + $coeff * $xx * cos($alfa);
Imageline ($im, $yyy, $zzz, $yyy, $zzz, $blu);
}

// disegna centro di massa

if ($cm == 'S')
{
$x = ($m1 * $u0[1]["x"] + $m2 * $u0[2]["x"] + $m3 * $u0[3]["x"]) / ($m1 + $m2 + $m3); 
$y = ($m1 * $u0[1]["y"] + $m2 * $u0[2]["y"] + $m3 * $u0[3]["y"]) / ($m1 + $m2 + $m3); 
$z = ($m1 * $u0[1]["z"] + $m2 * $u0[2]["z"] + $m3 * $u0[3]["z"]) / ($m1 + $m2 + $m3); 
if ($x >= -$xb and $x <= $xb and $y >= -$yb and $y <= $yb and $z >= -$zb and $z <= $zb)
{
$xx = $x - $xa;
$yy = $lar / 2 + (($y - $ya)) / $dy;
$zz = $alt / 2 - (($z - $za)) / $dz;
$yyy = $yy - $coeff * $xx * sin($alfa);
$zzz = $zz + $coeff * $xx * cos($alfa);
Imageline ($im, $yyy, $zzz, $yyy, $zzz, $nero);
}
}

// calcola distanze iniziali al cubo

for ($i = 1; $i <= 3; $i++)
{
for ($j = 1; $j <= 3; $j++)
{
$dcubo[$i][$j] = pow( pow($u0[$i]["x"]-$u0[$j]["x"],2) + pow($u0[$i]["y"]-$u0[$j]["y"],2) + pow($u0[$i]["z"]-$u0[$j]["z"],2) ,3);
$dcubo[$i][$j] = sqrt($dcubo[$i][$j]);
}
}

// calcolo accelerazioni 

$w0[1]["x"] = $G * $m2 * ($u0[2]["x"] - $u0[1]["x"]) / $dcubo[1][2] + $G * $m3 * ($u0[3]["x"] - $u0[1]["x"]) / $dcubo[1][3];
$w0[1]["y"] = $G * $m2 * ($u0[2]["y"] - $u0[1]["y"]) / $dcubo[1][2] + $G * $m3 * ($u0[3]["y"] - $u0[1]["y"]) / $dcubo[1][3];
$w0[1]["z"] = $G * $m2 * ($u0[2]["z"] - $u0[1]["z"]) / $dcubo[1][2] + $G * $m3 * ($u0[3]["z"] - $u0[1]["z"]) / $dcubo[1][3];

$w0[2]["x"] = $G * $m1 * ($u0[1]["x"] - $u0[2]["x"]) / $dcubo[2][1] + $G * $m3 * ($u0[3]["x"] - $u0[2]["x"]) / $dcubo[2][3];
$w0[2]["y"] = $G * $m1 * ($u0[1]["y"] - $u0[2]["y"]) / $dcubo[2][1] + $G * $m3 * ($u0[3]["y"] - $u0[2]["y"]) / $dcubo[2][3];
$w0[2]["z"] = $G * $m1 * ($u0[1]["z"] - $u0[2]["z"]) / $dcubo[2][1] + $G * $m3 * ($u0[3]["z"] - $u0[2]["z"]) / $dcubo[2][3];

$w0[3]["x"] = $G * $m1 * ($u0[1]["x"] - $u0[3]["x"]) / $dcubo[3][1] + $G * $m2 * ($u0[2]["x"] - $u0[3]["x"]) / $dcubo[3][2];
$w0[3]["y"] = $G * $m1 * ($u0[1]["y"] - $u0[3]["y"]) / $dcubo[3][1] + $G * $m2 * ($u0[2]["y"] - $u0[3]["y"]) / $dcubo[3][2];
$w0[3]["z"] = $G * $m1 * ($u0[1]["z"] - $u0[3]["z"]) / $dcubo[3][1] + $G * $m2 * ($u0[2]["z"] - $u0[3]["z"]) / $dcubo[3][2];

// calcolo velocità dopo $dt

$v1[1]["x"] = $v0[1]["x"] + $w0[1]["x"] * $dt;
$v1[1]["y"] = $v0[1]["y"] + $w0[1]["y"] * $dt;
$v1[1]["z"] = $v0[1]["z"] + $w0[1]["z"] * $dt;

$v1[2]["x"] = $v0[2]["x"] + $w0[2]["x"] * $dt;
$v1[2]["y"] = $v0[2]["y"] + $w0[2]["y"] * $dt;
$v1[2]["z"] = $v0[2]["z"] + $w0[2]["z"] * $dt;

$v1[3]["x"] = $v0[3]["x"] + $w0[3]["x"] * $dt;
$v1[3]["y"] = $v0[3]["y"] + $w0[3]["y"] * $dt;
$v1[3]["z"] = $v0[3]["z"] + $w0[3]["z"] * $dt;

// calcolo posizioni dopo $dt

$u1[1]["x"] = $u0[1]["x"] + $v0[1]["x"] * $dt;
$u1[1]["y"] = $u0[1]["y"] + $v0[1]["y"] * $dt;
$u1[1]["z"] = $u0[1]["z"] + $v0[1]["z"] * $dt;

$u1[2]["x"] = $u0[2]["x"] + $v0[2]["x"] * $dt;
$u1[2]["y"] = $u0[2]["y"] + $v0[2]["y"] * $dt;
$u1[2]["z"] = $u0[2]["z"] + $v0[2]["z"] * $dt;

$u1[3]["x"] = $u0[3]["x"] + $v0[3]["x"] * $dt;
$u1[3]["y"] = $u0[3]["y"] + $v0[3]["y"] * $dt;
$u1[3]["z"] = $u0[3]["z"] + $v0[3]["z"] * $dt;

// reset

$u0[1]["x"] = $u1[1]["x"]; $u0[1]["y"] = $u1[1]["y"]; $u0[1]["z"] = $u1[1]["z"]; 
$u0[2]["x"] = $u1[2]["x"]; $u0[2]["y"] = $u1[2]["y"]; $u0[2]["z"] = $u1[2]["z"]; 
$u0[3]["x"] = $u1[3]["x"]; $u0[3]["y"] = $u1[3]["y"]; $u0[3]["z"] = $u1[3]["z"]; 

$v0[1]["x"] = $v1[1]["x"]; $v0[1]["y"] = $v1[1]["y"]; $v0[1]["z"] = $v1[1]["z"]; 
$v0[2]["x"] = $v1[2]["x"]; $v0[2]["y"] = $v1[2]["y"]; $v0[2]["z"] = $v1[2]["z"]; 
$v0[3]["x"] = $v1[3]["x"]; $v0[3]["y"] = $v1[3]["y"]; $v0[3]["z"] = $v1[3]["z"]; 

}
} // fine interazione gravitazionale newtoniana

// interazione elettrica coulombiana

if ($el)
{
$t = 0;
for ($ii = 1; $ii <= $ni; $ii++) // iterazione
{
$t = $t + $dt; 

// disegna posizione corpo 1

$x = $u0[1]["x"]; 
$y = $u0[1]["y"]; 
$z = $u0[1]["z"];
if ($x >= -$xb and $x <= $xb and $y >= -$yb and $y <= $yb and $z >= -$zb and $z <= $zb)
{
$xx = $x - $xa;
$yy = $lar / 2 + (($y - $ya)) / $dy;
$zz = $alt / 2 - (($z - $za)) / $dz;
$yyy = $yy - $coeff * $xx * sin($alfa);
$zzz = $zz + $coeff * $xx * cos($alfa);
Imageline ($im, $yyy, $zzz, $yyy, $zzz, $verde);
}

// disegna posizione corpo 2

$x = $u0[2]["x"]; 
$y = $u0[2]["y"]; 
$z = $u0[2]["z"];
if ($x >= -$xb and $x <= $xb and $y >= -$yb and $y <= $yb and $z >= -$zb and $z <= $zb)
{
$xx = $x - $xa;
$yy = $lar / 2 + (($y - $ya)) / $dy;
$zz = $alt / 2 - (($z - $za)) / $dz;
$yyy = $yy - $coeff * $xx * sin($alfa);
$zzz = $zz + $coeff * $xx * cos($alfa);
Imageline ($im, $yyy, $zzz, $yyy, $zzz, $rosso);
}

// disegna posizione corpo 3

$x = $u0[3]["x"]; 
$y = $u0[3]["y"]; 
$z = $u0[3]["z"];
if ($x >= -$xb and $x <= $xb and $y >= -$yb and $y <= $yb and $z >= -$zb and $z <= $zb)
{
$xx = $x - $xa;
$yy = $lar / 2 + (($y - $ya)) / $dy;
$zz = $alt / 2 - (($z - $za)) / $dz;
$yyy = $yy - $coeff * $xx * sin($alfa);
$zzz = $zz + $coeff * $xx * cos($alfa);
Imageline ($im, $yyy, $zzz, $yyy, $zzz, $blu);
}

// disegna centro di massa

if ($cm == 'S')
{
$x = ($m1 * $u0[1]["x"] + $m2 * $u0[2]["x"] + $m3 * $u0[3]["x"]) / ($m1 + $m2 + $m3); 
$y = ($m1 * $u0[1]["y"] + $m2 * $u0[2]["y"] + $m3 * $u0[3]["y"]) / ($m1 + $m2 + $m3); 
$z = ($m1 * $u0[1]["z"] + $m2 * $u0[2]["z"] + $m3 * $u0[3]["z"]) / ($m1 + $m2 + $m3); 
if ($x >= -$xb and $x <= $xb and $y >= -$yb and $y <= $yb and $z >= -$zb and $z <= $zb)
{
$xx = $x - $xa;
$yy = $lar / 2 + (($y - $ya)) / $dy;
$zz = $alt / 2 - (($z - $za)) / $dz;
$yyy = $yy - $coeff * $xx * sin($alfa);
$zzz = $zz + $coeff * $xx * cos($alfa);
Imageline ($im, $yyy, $zzz, $yyy, $zzz, $nero);
}
}

// calcola distanze iniziali al cubo

for ($i = 1; $i <= 3; $i++)
{
for ($j = 1; $j <= 3; $j++)
{
$dcubo[$i][$j] = pow( pow($u0[$i]["x"]-$u0[$j]["x"],2) + pow($u0[$i]["y"]-$u0[$j]["y"],2) + pow($u0[$i]["z"]-$u0[$j]["z"],2) ,3);
$dcubo[$i][$j] = sqrt($dcubo[$i][$j]);
}
}

// calcolo accelerazioni 

$s12 = (-1) * sgn($q1 * $q2); 
$s13 = (-1) * sgn($q1 * $q3); 
$s23 = (-1) * sgn($q2 * $q3); 

$w0[1]["x"] = (1 / $m1) * ($E * abs($q1 * $q2) * $s12 * ($u0[2]["x"] - $u0[1]["x"]) / $dcubo[1][2] + $E * abs($q1 * $q3) * $s13 * ($u0[3]["x"] - $u0[1]["x"]) / $dcubo[1][3]);
$w0[1]["y"] = (1 / $m1) * ($E * abs($q1 * $q2) * $s12 * ($u0[2]["y"] - $u0[1]["y"]) / $dcubo[1][2] + $E * abs($q1 * $q3) * $s13 * ($u0[3]["y"] - $u0[1]["y"]) / $dcubo[1][3]);
$w0[1]["z"] = (1 / $m1) * ($E * abs($q1 * $q2) * $s12 * ($u0[2]["z"] - $u0[1]["z"]) / $dcubo[1][2] + $E * abs($q1 * $q3) * $s13 * ($u0[3]["z"] - $u0[1]["z"]) / $dcubo[1][3]);

$w0[2]["x"] = (1 / $m2) * ($E * abs($q2 * $q1) * $s12 * ($u0[1]["x"] - $u0[2]["x"]) / $dcubo[2][1] + $E * abs($q2 * $q3) * $s23 * ($u0[3]["x"] - $u0[2]["x"]) / $dcubo[2][3]);
$w0[2]["y"] = (1 / $m2) * ($E * abs($q2 * $q1) * $s12 * ($u0[1]["y"] - $u0[2]["y"]) / $dcubo[2][1] + $E * abs($q2 * $q3) * $s23 * ($u0[3]["y"] - $u0[2]["y"]) / $dcubo[2][3]);
$w0[2]["z"] = (1 / $m2) * ($E * abs($q2 * $q1) * $s12 * ($u0[1]["z"] - $u0[2]["z"]) / $dcubo[2][1] + $E * abs($q2 * $q3) * $s23 * ($u0[3]["z"] - $u0[2]["z"]) / $dcubo[2][3]);

$w0[3]["x"] = (1 / $m3) * ($E * abs($q3 * $q1) * $s13 * ($u0[1]["x"] - $u0[3]["x"]) / $dcubo[3][1] + $E * abs($q3 * $q2) * $s23 * ($u0[2]["x"] - $u0[3]["x"]) / $dcubo[3][2]);
$w0[3]["y"] = (1 / $m3) * ($E * abs($q3 * $q1) * $s13 * ($u0[1]["y"] - $u0[3]["y"]) / $dcubo[3][1] + $E * abs($q3 * $q2) * $s23 * ($u0[2]["y"] - $u0[3]["y"]) / $dcubo[3][2]);
$w0[3]["z"] = (1 / $m3) * ($E * abs($q3 * $q1) * $s13 * ($u0[1]["z"] - $u0[3]["z"]) / $dcubo[3][1] + $E * abs($q3 * $q2) * $s23 * ($u0[2]["z"] - $u0[3]["z"]) / $dcubo[3][2]);

// calcolo velocità dopo $dt

$v1[1]["x"] = $v0[1]["x"] + $w0[1]["x"] * $dt;
$v1[1]["y"] = $v0[1]["y"] + $w0[1]["y"] * $dt;
$v1[1]["z"] = $v0[1]["z"] + $w0[1]["z"] * $dt;

$v1[2]["x"] = $v0[2]["x"] + $w0[2]["x"] * $dt;
$v1[2]["y"] = $v0[2]["y"] + $w0[2]["y"] * $dt;
$v1[2]["z"] = $v0[2]["z"] + $w0[2]["z"] * $dt;

$v1[3]["x"] = $v0[3]["x"] + $w0[3]["x"] * $dt;
$v1[3]["y"] = $v0[3]["y"] + $w0[3]["y"] * $dt;
$v1[3]["z"] = $v0[3]["z"] + $w0[3]["z"] * $dt;

// calcolo posizioni dopo $dt

$u1[1]["x"] = $u0[1]["x"] + $v0[1]["x"] * $dt;
$u1[1]["y"] = $u0[1]["y"] + $v0[1]["y"] * $dt;
$u1[1]["z"] = $u0[1]["z"] + $v0[1]["z"] * $dt;

$u1[2]["x"] = $u0[2]["x"] + $v0[2]["x"] * $dt;
$u1[2]["y"] = $u0[2]["y"] + $v0[2]["y"] * $dt;
$u1[2]["z"] = $u0[2]["z"] + $v0[2]["z"] * $dt;

$u1[3]["x"] = $u0[3]["x"] + $v0[3]["x"] * $dt;
$u1[3]["y"] = $u0[3]["y"] + $v0[3]["y"] * $dt;
$u1[3]["z"] = $u0[3]["z"] + $v0[3]["z"] * $dt;

// reset

$u0[1]["x"] = $u1[1]["x"]; $u0[1]["y"] = $u1[1]["y"]; $u0[1]["z"] = $u1[1]["z"]; 
$u0[2]["x"] = $u1[2]["x"]; $u0[2]["y"] = $u1[2]["y"]; $u0[2]["z"] = $u1[2]["z"]; 
$u0[3]["x"] = $u1[3]["x"]; $u0[3]["y"] = $u1[3]["y"]; $u0[3]["z"] = $u1[3]["z"]; 

$v0[1]["x"] = $v1[1]["x"]; $v0[1]["y"] = $v1[1]["y"]; $v0[1]["z"] = $v1[1]["z"]; 
$v0[2]["x"] = $v1[2]["x"]; $v0[2]["y"] = $v1[2]["y"]; $v0[2]["z"] = $v1[2]["z"]; 
$v0[3]["x"] = $v1[3]["x"]; $v0[3]["y"] = $v1[3]["y"]; $v0[3]["z"] = $v1[3]["z"]; 

}
} // fine interazione elettrica coulombiana

// disegna immagine

$nomefile = $REMOTE_ADDR;
$nomefile = "grafico" .str_replace(".", "-", $nomefile). ".png";

ImagePng ($im, $nomefile); 

echo "&nbsp;<p>";
echo "&nbsp;<p>";
echo "&nbsp;<p>";
echo "&nbsp;<p>";

echo "<a href='$nomefile'>Visualizza il grafico</a>";

</script>

</body>

</html>

</html>


sgn.php


<script language="php">

error_reporting (E_ALL ^ E_NOTICE);

function sgn($x)
{
// funzione sgn
// x = variabile indipendente

if ($x > 0)
{
return +1;

if ($x == 0)
{
return 0;

if ($x < 0)
{
return -1;


} // fine sgn()

</script>