PHP рдореЗрдВ 3 рдбреА рдореЗрдВ рдХрдг рдкреНрд░рдгрд╛рд▓реА

рдмрдЪрдкрди рд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╝реАрдорддреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рдкрдирд╛ рд╣реИ - рдПрдХ рднреМрддрд┐рдХреА рдЗрдВрдЬрди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред рдПрдХ рд╕рдкрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЗрд╕рдХреЗ рдХрд░реАрдм рдХрднреА рдирд╣реАрдВ рдЖрдпрд╛ред рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдХреБрдЫ рд░рд╛рддреЗрдВ рдереА рдЬрдм рдореБрдЭреЗ рдШрд░ рдХреЗ рдЕрдВрджрд░ рдбреНрдпреВрдЯреА рдкрд░ рдЬрд╛рдирд╛ рдерд╛, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд▓реИрдкрдЯреЙрдк рдерд╛ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВрдиреЗ PHP рдореЗрдВ рдХрдгреЛрдВ рдХреА рдЧрддрд┐ рдФрд░ рдЯрдХрд░рд╛рд╡ рдХреЛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдЙрдкрдХреНрд░рдо рдХрд┐рдпрд╛ред PHP рдореЗрдВ рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдРрд╕реА рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкрд╣рд▓реЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рдереЗ, рдлрд┐рд░ рдЙрд╕рдиреЗ рдЧреНрд░рд╛рдлрд┐рдХ рдЪрд┐рддреНрд░ рд▓реЗрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рддреБрд░рдВрдд рд╣реА рдПрдиреАрдореЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдЧрдпрд╛ ...
рдЫрд╡рд┐


Googling, рдореБрдЭреЗ рдПрдХ рдкреНрд░рд╛рдЪреАрди рд╡рд░реНрдЧ GIFEncoder v.2 рдорд┐рд▓рд╛ , рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдлрд┐рд▓реНрдо рдореЗрдВ рдлреНрд░реЗрдо рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ! рдореБрдЭреЗ рдмрд╣реБрдд рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ рдореИрдВрдиреЗ рдкреНрд░рдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦреЗред
рджрд╛рд▓реЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╣рд▓реА, рдЬрдЯрд┐рд▓ рдФрд░ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдереАред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдХреНрд╕ рдкрд░ рдХрдг рдХреЗ рдПрдХ рд╕рд░рд▓ рдЖрдВрджреЛрд▓рди рдХреЗ рд╕рд╛рде, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 1, рдФрд░ рдПрдХ рд╣реА рд╡рд╛рдИ, рд╕рднреА 360 рдкрдХреНрд╖реЛрдВ рдкрд░ рдмрд┐рдЦрд░реЗ рд╣реБрдП рдХрдг рдПрдХ рд╕рд░реНрдХрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ - рд╡реЗ рд╣рдардкреВрд░реНрд╡рдХ рдПрдХ рд▓рдпрдмрджреНрдзрддрд╛ рдореЗрдВ рдКрдкрд░ рдЦрдбрд╝реЗ рдереЗред рдореИрдВрдиреЗ рдмреАрдЬрдЧрдгрд┐рдд рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдкрдврд╝рд╛рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕реБрдзрд╛рд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рдереА, рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ред
рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдПрдХ рд╡рд┐рдорд╛рди рдкрд░ 3 рдбреА рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рдмрд┐рдЦрд░реЗ рд╣реБрдП рдХрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдг рдерд╛ред рдЪреВрдВрдХрд┐ рдореИрдВрдиреЗ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рдмреАрдЬрдЧрдгрд┐рдд рд╕реЗ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╕рд┐рдЦрд╛рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕реБрдзрд╛рд░рд┐рдд рдЧреБрдгрд╛рдВрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдорджрдж рдорд┐рд▓реА: рд╕рд╣реА рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде, рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдкреНрд░рд╢рдВрд╕рдиреАрдп рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЛ рдЪреБрдирдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдПрдХ рддрд░реАрдХрд╛ рдпрд╛ рджреВрд╕рд░рд╛, рдЙрддреНрд╕рд╛рд╣ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ рдЬреЛ рдЙрдкрд░реЛрдХреНрдд рд╡реАрдбрд┐рдпреЛ рдмрдирд╛рддрд╛ рд╣реИред рдФрд░ рддрдВрддреНрд░ рдХреЛ рд╕реАрдзреЗ рдХреЛрдб рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдкрдХреЛ PHP рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдкрдврд╝рдирд╛ рдФрд░ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП:
<?php //    ,      =) set_time_limit(0); //   $start = microtime(1); // GIFEncoder  : // http://saintist.ru/2009/05/12/316/ include('gif_animate.php'); //     class space { //   public $points = array(); //   -  //       private $x; private $y; private $z; // . .  step. public $steps = 0; public function __construct($x, $y, $z) { $this -> x = $x; $this -> y = $y; $this -> z = $z; } // -  ... public function addPoint($point, $x, $y, $z, $fx = 0, $fy = 0, $fz = 0) { array_push($this -> points, array($point, $x, $y, $z)); $point -> addP($fx, $fy, $fz); } // .  ,     . //  -  ,    . //   (  -   )     , //    . ,    =    // ,     < 1. // , 1  =     1  1   . //       . public function step() { //      $t = 1; //   . //    ,   . $busy = array(); //     space       //     foreach ($this -> points as $n => &$point) { $x = $point[1]; $y = $point[2]; $z = $point[3]; //      -  ,    if (!($x >= 0 && $x < $this->x && $y >= 0 && $y < $this->y && $z >= 0 && $z < $this->z)) { unset($this->points[$n]); continue; } //       $f = abs($point[0]->p['fx']) + abs($point[0]->p['fy']) + abs($point[0]->p['fz']); //    ,     1   $t if ($f > 0 && 1 / $f < $t) { //      $t = 1 / $f; } } //  .  . foreach ($this -> points as $n => &$point) { $xyz = abs($point[0]->p['fx']) + abs($point[0]->p['fy']) + abs($point[0]->p['fz']); //        $hypo = pow(abs($point[0]->p['fx']), 2) + pow(abs($point[0]->p['fy']), 2) + pow(abs($point[0]->p['fz']), 2); //   $move_x -  ,      . //   . //    X  Y  ,  Z -    //     X  Y, . if ($point[0]->p['fx'] != 0 && $xyz > 0) { if ($point[0]->p['fx'] < 0) { $fxmin = 1; } $move_x = sqrt($hypo) * ($point[0]->p['fx'] / $xyz); if (isset($fxmin)) $move_x = $move_x * -1; } else { $move_x = 0; } if ($point[0]->p['fy'] != 0 && $xyz > 0) { if ($point[0]->p['fy'] < 0) { $fymin = 1; } $move_y = sqrt($hypo) * ($point[0]->p['fy'] / $xyz); if (isset($fymin)) $move_y = $move_y * -1; } else { $move_y = 0; } if ($point[0]->p['fz'] != 0 && $xyz > 0) { if ($point[0]->p['fz'] < 0) { $fzmin = 1; } $move_z = sqrt($hypo) * ($point[0]->p['fz'] / $xyz); if (isset($fzmin)) $move_z = $move_z * -1; } else { $move_z = 0; } //        $point[1] += $move_x*$t; $point[2] += $move_y*$t; $point[3] += $move_z*$t; } $this -> steps+=$t; } //    space  GIF public function shot() { $r = imagecreatetruecolor($this -> x+1, $this -> y+1); // ,   foreach ($this -> points as &$point) { $x = $point[1]; $y = $point[2]; $z = $point[3]; if ($x >= 0 && $x < $this->x && $y >= 0 && $y < $this->y && $z >= 0 && $z < $this -> z) { // ,  .  ,  ,    Z //   ,     -  Z. $ox = $this->x / 2; $oy = $this->y / 2; $oz = $this->z / 2; $xf = $x - $ox; $yf = $y - $oy; $zf = $z; $xr = $x - $xf / ($this->z/($this->z - $z)); $yr = $y - $yf / ($this->z/($this->z - $z)); imageline($r, $xr, $yr, $xr, $yr, $point[0]->color); } } ob_start(); imagegif($r); return ob_get_clean(); } } class Point { public $p = array('fx' => 0, 'fy' => 0, 'fz' => 0); public $color; //     public function __construct() { $red = dechex(rand(1, 255)); if (strlen($red) < 2) $red = '0'.$red; $green = dechex(rand(1, 255)); if (strlen($green) < 2) $green = '0'.$green; $blue = dechex(rand(1, 255)); if (strlen($blue) < 2) $blue = '0'.$blue; $this->color = hexdec("0x$red$green$blue"); } public function addP($fx = 0, $fy = 0, $fz = 0) { $this->p['fx'] += $fx; $this->p['fy'] += $fy; $this->p['fz'] += $fz; } } $gifs = array(); // GD- GIF-,     $space = new space(399, 399, 399, false, true); //     . //      ,     $rands = range(-10, 10, 0.5); for ($i=0; $i<1000; $i++) { // ...    $space->addPoint(new Point, 200, 200, 200, $rands[array_rand($rands)], $rands[array_rand($rands)], $rands[array_rand($rands)]); } //   100      ... while($space->steps < 100) { $nshot = $space -> steps; $space -> step(); if ((int)$nshot < (int)$space -> steps) { array_push($gifs, $space -> shot()); echo 'Step #',$space -> steps,"\r\n"; } } //    ... $gif = new GIFEncoder($gifs, 0, 0, 0, 0, 0, 0, 'bin'); file_put_contents('c:\anim.gif', $gif -> GetAnimation()); echo "\r\nTime: ",substr(microtime(1) - $start, 0, 4); //   :-) 

рд╕рд┐рджреНрдзрд╛рдВрдд рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдкрд╣рд▓реЗ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рдерд╛:
рдЫрд╡рд┐
рдлрд┐рд░ 3 рдбреА рдореЗрдВ, рдпрд╣ рдПрдХ:
рдЫрд╡рд┐
рдмреНрд░реИрдб? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╛рдЧрд▓ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдбрд░реЛ рдорддред рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕реАрдЦрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред


Source: https://habr.com/ru/post/In115791/


All Articles