eXorithm – Execute Algorithm: View / Run Algorithm project_polygon

Logo Beta

function project_polygon ($points, $degree_x, $degree_y, $degree_z, $center_x, $center_y, $center_z, $dist1, $dist2, $include_z

{

  // check points

  if ((count$points)%3)!=0) {

    throw new Exception'The points must be a list like x1, y1, z1, x2, y2, z2, etc. The number of points therefore must be divisible by three.');

  }

  

  $degree_x = deg2rad$degree_x);

  $degree_y = deg2rad$degree_y);

  $degree_z = deg2rad$degree_z);

  

  $cosx = cos$degree_x);

  $sinx = sin$degree_x);

  $cosy = cos$degree_y);

  $siny = sin$degree_y);

  $cosz = cos$degree_z);

  $sinz = sin$degree_z);

  

  $array = array();

  

  for ($i=0;$icount$points);$i$i+3) {

    $x0 = $points$i]-$center_x

    $y0 = $points$i+1]-$center_y

    $z0 = $points$i+2]-$center_z

    

    $x1 = $cosy*($sinz$y0 + $cosz$x0) - $siny$z0

    $y1 = $sinx*($cosy$z0 + $siny*($sinz$y0 + $cosz$x0)) + $cosx*($cosz$y0 - $sinz$x0);

    $z1 = $cosx*($cosy$z0 + $siny*($sinz$y0 + $cosz$x0)) - $sinx*($cosz$y0 - $sinz$x0);

  

    $x2 = $x1$dist1/($z1$dist1$dist2);

    $y2 = $y1$dist1/($z1$dist1$dist2);

    $z2 = $z1$dist1/($z1$dist1$dist2);

  

    $array[] = $x2

    $array[] = $y2

    if ($include_z) $array[] = $z2

  }

  

  return $array

}