"; for ($j=0; $j<$n; $j++) echo "
"; echo" "; for ($j=0; $j<$n; $j++) { $a = (int) round(sqrt($s[$j])); // прямолінійний рівномірний рух $x[$j] += $dx[$j]; $y[$j] += $dy[$j]; // відбивання від меж чорного прямокутника;; if ($x[$j]<0) {$x[$j] = -$x[$j]; $dx[$j] = -$dx[$j];} if ($y[$j]<0) {$y[$j] = -$y[$j]; $dy[$j] = -$dy[$j];} if ($x[$j]>$w-$a) {$x[$j] = 2*($w-$a)-$x[$j]; $dx[$j]=-$dx[$j];} if ($y[$j]>$h-$a) {$y[$j] = 2*($h-$a)-$y[$j]; $dy[$j]=-$dy[$j];} } // перебір всіх можливих пар квадратів for ($j=0; $j<$n-1; $j++) { $aj = sqrt($s[$j]); for ($k=$j+1; $k<$n; $k++) { // перевірка можливості злиття у даному кадрі // (квадрати дотикаються) або між поточним і // попереднім кадром (квадрати перетинаються) $ak = sqrt($s[$k]); if ((($x[$k] <= $x[$j]) && ($x[$j] <= $x[$k] + $ak) || ($x[$j] <= $x[$k]) && ($x[$k] <= $x[$j] + $aj)) && (($y[$k] <= $y[$j]) && ($y[$j] <= $y[$k] + $ak) || ($y[$j] <= $y[$k]) && ($y[$k] <= $y[$j] + $aj))) { // злиття квадратів у квадрат з номером $j // з усіма зауваженнями щодо швидкостей, // кольорів, координат і площ $dx[$j]=($dx[$j]*$s[$j] + $dx[$k]*$s[$k])/($s[$j] + $s[$k]); $dy[$j]=($dy[$j]*$s[$j] + $dy[$k]*$s[$k])/($s[$j] + $s[$k]); $r[$j] =( $r[$j]*$s[$j] + $r[$k]*$s[$k])/($s[$j] + $s[$k]); $g[$j] =( $g[$j]*$s[$j] + $g[$k]*$s[$k])/($s[$j] + $s[$k]); $b[$j] =( $b[$j]*$s[$j] + $b[$k]*$s[$k])/($s[$j] + $s[$k]); $x[$j] =(($x[$j]+$aj/2)*$s[$j]+($x[$k]+$ak/2)*$s[$k])/($s[$j] + $s[$k]); $y[$j] =(($y[$j]+$aj/2)*$s[$j]+($y[$k]+$ak/2)*$s[$k])/($s[$j] + $s[$k]); $s[$j] = $s[$j] + $s[$k]; $aj = sqrt($s[$j]); $x[$j]-= $a[$j]/2; $y[$j]-= $a[$j]/2; // зменшення на 1 кількості дисків після злиття пари дисків; $n1 = $n-1; $x[$k] = $x[$n1]; $y[$k] = $y[$n1]; $dx[$k]= $dx[$n1]; $dy[$k]= $dy[$n1]; $r[$k] = $r[$n1]; $g[$k] = $g[$n1]; $b[$k] = $b[$n1]; $s[$k] = $s[$n1]; $n--; } } } // зміна координат при відбиванні від країв після злиття; for ($j=0; $j<$n; $j++) { $a = (int) round(sqrt($s[$j])); if ($x[$j]<0) {$x[$j] = -$x[$j]; $dx[$j] = -$dx[$j];} if ($y[$j]<0) {$y[$j] = -$y[$j]; $dy[$j] = -$dy[$j];} if ($x[$j]>$w-$a) {$x[$j] = 2*($w-$a)-$x[$j]; $dx[$j]=-$dx[$j];} if ($y[$j]>$h-$a) {$y[$j] = 2*($h-$a)-$y[$j]; $dy[$j]=-$dy[$j];} } // використання сесії для збереження значень; $data = "$w $h $n"; for ($j=0; $j<$n; $j++) { $x_ = $x[$j]; // абсциса ЛВК квадрата $y_ = $y[$j]; // ордината ЛВК квадрата $dx_= $dx[$j]; // початковий приріст абсциси ЛВК квадрата $dy_= $dy[$j]; // початковий приріст ординати ЛВК квадрата $r_ = $r[$j]; // інтенсивність червоного кольору $g_ = $g[$j]; // інтенсивність зеленого кольору $b_ = $b[$j]; // інтенсивність блакитного кольору $s_ = $s[$j]; // площа (у пікселях) $data = $data." $x_ $y_ $dx_ $dy_ $r_ $g_ $b_ $s_"; } $_SESSION['data']=$data; Header('Refresh: 0'); ?>