eXorithm – Execute Algorithm: View / Run Algorithm plot_3d_function

Logo Beta

function plot_3d_function ($function, $variable1, $variable2, $center_x, $center_y, $range, $z_scale, $width, $detail, $line_color, $surface_color

{

  $x1 = $center_x$range/2;

  $y1 = $center_y$range/2;

  

  $xfinal = $center_x$range/2;

  $yfinal = $center_y$range/2;

  

  // step size

  $step = $range$detail

  

  // all the polygons that make up the graph

  $polygons = array();

  

  // generate the polygons for the graph

  for ($ii=0;$ii<=$detail$ii++) {

    $x$x1+($ii$step);

    for ($jj=0;$jj<=$detail$jj++) {

      $y$y1+($jj$step);

      

      $z = evaluate_equation$function, array$variable1=>$x, $variable2=>$y))*$z_scale

      

      if (!is_nan$z) && !is_infinite$z)) {

        

        if ($ii$detail) {

          if ($jj$detail) {

            $poly = $ii$detail$jj+1;

            $polygons$poly][6] = $x

            $polygons$poly][7] = $y

            $polygons$poly][8] = $z

          }

          

          if ($jj>0) {

            $poly = $ii$detail$jj

            $polygons$poly][9] = $x

            $polygons$poly][10] = $y

            $polygons$poly][11] = $z

          }

        }

        

        if ($ii>0) {

          if ($jj$detail) {

            $poly = ($ii-1)*$detail$jj+1;

            $polygons$poly][3] = $x

            $polygons$poly][4] = $y

            $polygons$poly][5] = $z

          }

          

          if ($jj>0) {

            $poly = ($ii-1)*$detail$jj

            $polygons$poly][0] = $x

            $polygons$poly][1] = $y

            $polygons$poly][2] = $z

          }

        }

      }

    }

  }

  

  $polygons = array_values$polygons);

  

  // project each of the polygons into 2-d

  for ($i=0; $icount$polygons); $i++) {

    $points[] = project_polygon$polygons$i], -60, 180, 135, $center_x, $center_y, 0, $range, $range*2, true);

  }

  

  // scale the image somewhat

  $scale = $width*2/$range

  

  return render_polygons$points, $line_color, $surface_color, false, false, $width, $scale);

}