<?php

header ("Content-type: image/png");

// ПАРАМЕТРИЧЕСКАЯ ФУНКЦИЯ
// ТОР

// Наши функции.

function Graph_X($R_param, $a_param, $u, $fi)
{
  $X = ($R_param + $a_param*cos($u)) * cos($fi);
  return $X;
}
function Graph_Y($R_param, $a_param, $u, $fi)
{
  $Y = ($R_param + $a_param*cos($u)) * sin($fi);
  return $Y;
}
function Graph_Z($R_param, $a_param, $u, $fi)
{
  $Z = $a_param*sin($u);
  return $Z;
}

// цвет графика
 $r=60; // red
 $g=30; // green
 $b=30; // blue
// 45 ГРАДУСОВ
 $alfa=45;  // относительно оси 0Y
 $beta=45;  // относительно оси 0X
// границы графика по оси 0Y
 $u_low=deg2rad(0);
 $u_up=deg2rad(360);
// границы графика по оси 0X
 $fi_low=deg2rad(0);
 $fi_up=deg2rad(360);
// параметры графика
 $R_param=100;
 $a_param=50;

 $X_dec_max=600;
 $X_0=$X_dec_max/2;
 $left_X=-300;
 $right_X=300;
 $Y_dec_max=600;
 $Y_0=$Y_dec_max/2;
 $low_Y=-300;
 $top_Y=300;


 $im = ImageCreate($X_dec_max, $Y_dec_max);
 $bgcolor = ImageColorAllocate ($im, 100, 250, 150);

 $line_color = ImageColorAllocate ($im, 0, 0, 0);
 
 ImageLine($im, $X_0, $Y_0, $X_dec_max, $Y_dec_max/2, $line_color);
 ImageDashedLine($im, $X_0, $Y_0, 0, $Y_dec_max/2, $line_color);

 ImageLine($im, $X_0, $Y_0, $X_0, 0, $line_color);
 ImageDashedLine($im, $X_0, $Y_0, $X_0, $Y_dec_max, $line_color);

 ImageLine($im, $X_0, $Y_0, $left_X/cos($beta), $Y_dec_max-$low_Y/cos($alfa), $line_color);
 ImageDashedLine($im, $X_0, $Y_0, $right_X/cos($beta), $Y_dec_max-$top_Y/cos($alfa), $line_color);

 $text_color=ImageColorAllocate ($im, 80, 0, 160);
 ImageString($im, 3, $X_0+5, $Y_dec_max-$Y_0, "0", $text_color);
 ImageString($im, 3, $X_0+$right_X-10, $Y_dec_max-$Y_0, "X", $text_color);
 ImageString($im, 3, $X_0+5, $Y_dec_max-($Y_0+$top_Y-5), "Y", $text_color);
 ImageString($im, 3, 3, $Y_dec_max-20, "Z", $text_color);

 $pol_color=ImageColorAllocate($im, 0, 0, 0);

 $pol_pic[0]=0; $pol_pic[1]=$Y_dec_max;
 $pol_pic[2]=10; $pol_pic[3]=$Y_dec_max-5;
 $pol_pic[4]=5; $pol_pic[5]=$Y_dec_max-8;
 ImageFilledPolygon($im, $pol_pic, 3, $pol_color);

 $pol_pic[0]=$X_dec_max; $pol_pic[1]=$Y_0;
 $pol_pic[2]=$X_dec_max-10; $pol_pic[3]=$Y_0-3;
 $pol_pic[4]=$X_dec_max-10; $pol_pic[5]=$Y_0+3;
 ImageFilledPolygon($im, $pol_pic, 3, $pol_color);

 $pol_pic[0]=$X_0; $pol_pic[1]=0;
 $pol_pic[2]=$X_0-3; $pol_pic[3]=10;
 $pol_pic[4]=$X_0+3; $pol_pic[5]=10;
 ImageFilledPolygon($im, $pol_pic, 3, $pol_color);

// *******ГОРИЗОНТАЛЬНАЯ*СЕТКА*********************************************

 $X2d_0=0; $Y2d_0=0;
 $shag=0.2; 

// границы по "u"
 for($u3d=$u_low, $j=1; $u3d<=$u_up; $u3d=$u3d+$shag, $j++)
 {
// границы по "fi"
   for ($fi3d=$fi_low, $i=1; $fi3d<=$fi_up; $fi3d=$fi3d+$shag, $i++)
   {
// обращение к функциям
       $X3d=Graph_X($R_param, $a_param, $u3d, $fi3d);
       $Y3d=Graph_Y($R_param, $a_param, $u3d, $fi3d);
       $Z3d=Graph_Z($R_param, $a_param, $u3d, $fi3d);
  
// преобразование 3d в 2d
       $X2d=$X3d-$Z3d*cos($beta);
       $Y2d=$Y3d-$Z3d*cos($alfa);
  
// 3-d плоскость
               $pix_color=ImageColorAllocate($im, $r, $g, $b);
               ImageSetPixel($im, ($X_dec_max/2)+$X2d, $Y_dec_max-($Y_dec_max/2+$Y2d), $pix_color);
if($i!=0)
{
  if($i!=1)
  {
    if($j!=0)
    {
      if($j!=1)
      {

               ImageLine($im, ($X_dec_max/2)+$X2d, $Y_dec_max-($Y_dec_max/2+$Y2d), ($X_dec_max/2)+$X2d_1, $Y_dec_max-($Y_dec_max/2+$Y2d_1), $pix_color);
      }
    }
  }
}
//               ImageString($im, 1, $j*25, $i*15, "$u3d   ", $pix_color);

       $X2d_1=$X2d_0;
       $X2d_0=$X2d;

       $Y2d_1=$Y2d_0;
       $Y2d_0=$Y2d;
  }
 }

// ********ВЕРТИКАЛЬНАЯ*СЕТКА********************************************


 $X2d_0=0; $Y2d_0=0;
 $shag=0.2; 

// границы по "fi"
 for($fi3d=$fi_low, $j=1; $fi3d<=$fi_up; $fi3d=$fi3d+$shag, $j++)
 {
// границы по "u"
   for ($u3d=$u_low, $i=1; $u3d<=$u_up; $u3d=$u3d+$shag, $i++)
   {
// обращение к функциям
       $X3d=Graph_X($R_param, $a_param, $u3d, $fi3d);
       $Y3d=Graph_Y($R_param, $a_param, $u3d, $fi3d);
       $Z3d=Graph_Z($R_param, $a_param, $u3d, $fi3d);
  
// преобразование 3d в 2d
       $X2d=$X3d-$Z3d*cos($beta);
       $Y2d=$Y3d-$Z3d*cos($alfa);
  
// 3-d плоскость
               $pix_color=ImageColorAllocate($im, $r, $g, $b);
               ImageSetPixel($im, ($X_dec_max/2)+$X2d, $Y_dec_max-($Y_dec_max/2+$Y2d), $pix_color);
if($i!=0)
{
  if($i!=1)
  {
    if($j!=0)
    {
      if($j!=1)
      {

               ImageLine($im, ($X_dec_max/2)+$X2d, $Y_dec_max-($Y_dec_max/2+$Y2d), ($X_dec_max/2)+$X2d_1, $Y_dec_max-($Y_dec_max/2+$Y2d_1), $pix_color);
      }
    }
  }
}
//               ImageString($im, 1, $j*25, $i*15, "$u3d   ", $pix_color);

       $X2d_1=$X2d_0;
       $X2d_0=$X2d;

       $Y2d_1=$Y2d_0;
       $Y2d_0=$Y2d;
  }
 }

ImagePng ($im);
?>
      
Hosted by uCoz