content: /*
   * Copyright (C) 2014 Susanne Westphal 
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */
  package edu.stanford.rsl.conrad.geometry.shapes.simple;
  
  import java.io.Serializable;
  import java.util.ArrayList;
  
  /**
   * Class to model points of arbitrary dimension. Compatible with numerics.
   * 
   * @author suwestphal
   * 
   */
  public class SwissRoll implements Serializable {
  
  	private static final long serialVersionUID = 1L;
  	private static PointND[] points;
  	private static ArrayList<PointND> pointList;
  
  	/**
  	 * function to build a SwissRoll with the given parameters, saves the points in an PointND[] array and in a ArrayList<PoinND>  
  	 * @param gap gap between the single "snakes"
  	 * @param numberOfPoints number of points in one "snake"
  	 * @param width number of "snakes" beside each other
  	 */
  	public SwissRoll(double gap, int numberOfPoints, int width) {
  		pointList = new ArrayList<PointND>();
  		points = new PointND[numberOfPoints * width];
  		double distance = 1.0 / numberOfPoints;
  	
  		for (int i = 0; i < numberOfPoints; ++i) {
  			for (int j = 0; j < width; ++j) {
  				points[width * i + j] = new PointND(5
  						* Math.sqrt(2 + 2 * (-1 + i * distance))
  						* Math.cos(2 * Math.PI
  								* Math.sqrt(2 + 2 * (-1 + i * distance))), 5
  						* Math.sqrt(2 + 2 * (-1 + i * distance))
  						* Math.sin(2 * Math.PI
  								* Math.sqrt(2 + 2 * (-1 + i * distance))), 2
  						* j * gap);
  				pointList.add(points[width * i + j]);
  
  			}
  		}
  	}
  	/**
  	 * returns an ArrayList of the points of the SwissRoll
  	 * @return an ArrayList of the points of the SwissRoll
  	 */
  	public ArrayList<PointND> getPointList(){
  		return pointList; 
  	}
  	
  	/**
  	 * returns an PointND[] of the points of the SwissRoll
  	 * @return an PointND[] of the points of the SwissRoll
  	 */
  	public PointND[] getPoints(){
  		return points;
  	}
  
  }