<?php

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

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

function Graph($x, $y)
{
  $z=$y*sin($x);
  return $z;
}

// цвет графика
 $r=30; // red
 $g=30; // green
 $b=60; // blue
// 45 ГРАДУСОВ
 $alfa=deg2rad(45);  // относительно оси 0Y 45 градусов
 $beta=deg2rad(45);  // относительно оси 0X 45 градусов
// границы графика по оси 0Y
 $Y_low=-70;
 $Y_up=70;
// границы графика по оси 0X
 $X_low=-200;
 $X_up=200;

 $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, 250, 100, 200);

 $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($alfa), $Y_dec_max-$low_Y/cos($alfa), $line_color);
 ImageDashedLine($im, $X_0, $Y_0, $right_X/cos($alfa), $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);

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

 $X3d=0; $Y3d=0;
 $X3d_0=0; $Y3d_0=0;
 $shag=3; $Z3d_0=0; $X3d_0=0;
 $X2d_0=0; $Y2d_0=0;

// границы по оси 0Y
 for($Y3d=$Y_low, $j=1; $Y3d<=$Y_up; $Y3d=$Y3d+$shag, $j++)
 {
// в зависимости от делителя, регулируется разряженность 3-х мерного графика
  $delit=2;
// делитель $delit
  $del_j=$j/$delit;
  $del_cel_j=floor($del_j);
  $ost_j=$del_j-$del_cel_j;
  $ost_abs_j=abs($ost_j);
  if($ost_abs_j == 0)
  {
// границы по оси 0X
   for ($X3d=$X_low, $i=1; $X3d<=$X_up; $X3d=$X3d+$shag, $i++)
   {
    if($X3d!=0)
    {
     $del=$i/2;
     $del_cel=floor($del);
     $ost=$del-$del_cel;
     $ost_abs=abs($ost);
     if($ost_abs == 0)
     {
//     $Y3d=50;
// обращение к функции
       $Z3d=Graph($X3d, $Y3d);
  
// преобразование 3d в 2d
       $X2d=$X3d-$Z3d*cos($beta);
       $Y2d=$Y3d-$Z3d*cos($alfa);
  
       $pix_color=ImageColorAllocate($im, $r, $g, $b);
  
// 2-d плоскость
//     ImageSetPixel($im, ($X_dec_max/2)+$X3d, $Y_dec_max-($Y_dec_max/2+$Z3d), $pix_color);
//     ImageLine($im, ($X_dec_max/2)+$X3d, $Y_dec_max-($Y_dec_max/2+$Z3d), ($X_dec_max/2)+$X3d_1, $Y_dec_max-($Y_dec_max/2+$Z3d_1), $pix_color);
  
  $X3d_1=$X3d_0;
  $Z3d_1=$Z3d_0;
  
  $X3d_0=$X3d;
  $Z3d_0=$Z3d;

// 3-d плоскость
       if($i!=0)
       {
         if($i!=1)
         {
           if($i!=2)
           {
             if($i!=4)
             {
               ImageSetPixel($im, ($X_dec_max/2)+$X2d, $Y_dec_max-($Y_dec_max/2+$Y2d), $pix_color);
               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);
             }
           }
         }
       }
  
       $X2d_1=$X2d_0;
       $X2d_0=$X2d;

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

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

 $X3d=0; $Y3d=0;
 $X3d_0=0; $Y3d_0=0;
 $shag=3; $Z3d_0=0; $X3d_0=0;
 $X2d_0=0; $Y2d_0=0;

// границы по оси 0X
 for($X3d=$X_low, $j=1; $X3d<=$X_up; $X3d=$X3d+$shag, $j++)
 {
// в зависимости от делителя, регулируется разряженность 3-х мерного графика
  $delit=2;
// делитель $delit
  $del_j=$j/$delit;
  $del_cel_j=floor($del_j);
  $ost_j=$del_j-$del_cel_j;
  $ost_abs_j=abs($ost_j);
  if($ost_abs_j == 0)
  {
// границы по оси 0Y
   for ($Y3d=$Y_low, $i=1; $Y3d<=$Y_up; $Y3d=$Y3d+$shag, $i++)
   {
    if($X3d!=0)
    {
     $del=$i/2;
     $del_cel=floor($del);
     $ost=$del-$del_cel;
     $ost_abs=abs($ost);
     if($ost_abs == 0)
     {
//     $Y3d=50;
// обращение к функции
       $Z3d=Graph($X3d, $Y3d);
  
// преобразование 3d в 2d
       $X2d=$X3d-$Z3d*cos($beta);
       $Y2d=$Y3d-$Z3d*cos($alfa);
  
       $pix_color=ImageColorAllocate($im, $r, $g, $b);
  
// 2-d плоскость
//     ImageSetPixel($im, ($X_dec_max/2)+$X3d, $Y_dec_max-($Y_dec_max/2+$Z3d), $pix_color);
//     ImageLine($im, ($X_dec_max/2)+$X3d, $Y_dec_max-($Y_dec_max/2+$Z3d), ($X_dec_max/2)+$X3d_1, $Y_dec_max-($Y_dec_max/2+$Z3d_1), $pix_color);
  
  $X3d_1=$X3d_0;
  $Z3d_1=$Z3d_0;
  
  $X3d_0=$X3d;
  $Z3d_0=$Z3d;

// 3-d плоскость
       if($i!=0)
       {
         if($i!=1)
         {
           if($i!=2)
           {
             if($i!=4)
             {
               ImageSetPixel($im, ($X_dec_max/2)+$X2d, $Y_dec_max-($Y_dec_max/2+$Y2d), $pix_color);
               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);
             }
           }
         }
       }
  
       $X2d_1=$X2d_0;
       $X2d_0=$X2d;

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

ImagePng ($im);
?>
      
Hosted by uCoz