// Exemplo de arquivo de descricao de cena para POV-ray
// Last edited on 2017-05-07 20:10:09 by stolfilocal

#include "colors.inc"
#include "shapes.inc"

#declare component_color =
  texture {
    pigment { color rgb <0.2, 0.2, 0.2> }
  }

#macro Arc(BeadCount, A1, A2, A3, A4)
  #local BeadsPerSide = BeadCount/4;
  #local A = A1;

  #for (Bead, 1, BeadsPerSide, 1)
    sphere {
      A, 0.1
      texture { component_color }
    }

    #declare A = A + (A2 - A1)/BeadsPerSide;
  #end

  #declare A = A2;

  #for (Bead, 1, BeadsPerSide, 1)
    sphere {
      A, 0.1
      texture { component_color }
    }

    #declare A = A + (A3 - A2)/BeadsPerSide;
  #end

  #declare A = A3;

  #for (Bead, 1, BeadsPerSide, 1)
    sphere {
      A, 0.1
      texture { component_color }
    }

    #declare A = A + (A4 - A3)/BeadsPerSide;
  #end
#end

background { color rgb <0.7, 0.7, 0.7> }

camera {
  location <2, 4, 5>
  look_at <0, 0.25, 0.75>
}

light_source { <2, 4, -3> color White }

#declare Points = array[6][4];

// Arc 0
#declare Points[0][0] = <-0.31, 1.03, 0.49>;
#declare Points[0][1] = <-1.31, -1.87, 2.11>;
#declare Points[0][2] = <2.77, -0.31, -0.99>;
#declare Points[0][3] = <-2.771, 0.182, 1.991>;

// Arc 1
#declare Points[1][0] = <-0.31, 1.03, 0.49>;
#declare Points[1][1] = <-1.31, -1.87, 2.11>;
#declare Points[1][2] = <2.77, -0.31, -0.99>;
#declare Points[1][3] = <-2.771, 0.182, 1.991>;

// Arc 2
#declare Points[2][0] = <2.819, 2.117, -2.79>;
#declare Points[2][1] = <-0.881, -0.112, 0.78>;
#declare Points[2][2] = <-1.102, 2.19, 1.891>;
#declare Points[2][3] = <1.81, 0.619, -2.12>;

// Arc 3
#declare Points[3][0] = <-1.44, 2.18, 0.189>;
#declare Points[3][1] = <-0.991, 1.179, 2.11>;
#declare Points[3][2] = <-1.510, -2.878, -0.009>;
#declare Points[3][3] = <2.190, 1.013, 0.81>;

#declare Points[0][3] = (Points[0][2] + Points[1][0])/2;
#declare Points[1][3] = (Points[1][2] + Points[2][0])/2;
#declare Points[2][3] = (Points[2][2] + Points[3][0])/2;
#declare Points[3][3] = Points[0][0];

#macro noh(P, N, M)
  #for (row, 0, N, 1)
    Arc(M, P[row][0], P[row][1], P[row][2], P[row][3])
  #end
#end

noh(Points, 3, 1000)