

import java.util.ArrayList;

import Jama.Matrix;
import Jcg.geometry.*;
import Jcg.graph.*;

/**
 * Provides methods for drawing graphs in 2D using iterative Tutte barycentric method
 *
 * @author Luca Castelli Aleardi
 */
public class IterativeTutteDrawing<X extends Point_> extends GraphDrawing<X>{

	Matrix laplacian;
	public static int nIterations=150;
	Point_[] exteriorPoints;

	public IterativeTutteDrawing() {}

	public IterativeTutteDrawing(Graph g, Point_2[] exteriorPoints) {
		this.g=g;
    	this.points=new ArrayList<X>(g.sizeVertices());
    	this.exteriorPoints=exteriorPoints;
	}

	/**
	 * compute the Tutte drawing of a planar graph iteratively
	 * using the Force-Directed paradigm
	 * The first k vertices are assumed to be fixed on the outer face
	 */	
	public void computeDrawing() {
		throw new Error("Iterative Tutte drawing: a' completer");
	}

	/**
	 * Test TutteDrawing methods
	 */
	public static void main(String[] args) {
		System.out.println("Tutte Drawing iteratively");
		//Graph g=AdjacencyGraph.constructDodecahedron();
		Graph g=graphExamples.example12();

		System.out.println("graph initialized");
		
		Point_2[] exteriorPoints=new Point_2[3];
		exteriorPoints[0]=new Point_2(0.,0.);
		exteriorPoints[1]=new Point_2(1.,0.);
		exteriorPoints[2]=new Point_2(0.,1.);
		//exteriorPoints[3]=new Point_2(-10.,10.);
		IterativeTutteDrawing<Point_2> d= new IterativeTutteDrawing<Point_2>(g, exteriorPoints);
		d.computeDrawing();
		System.out.println("planar representation computed");
		d.draw2D();
		
	}

}

