

import java.util.ArrayList;

import Jcg.geometry.*;
import Jcg.graph.*;


public class SpringDrawing_2<X extends Point_> extends GraphDrawing<X>{

	static double c1=2., c2=1., c3=1., c4=0.01;
	static int nIterations=200;
	
	public SpringDrawing_2(Graph g) {
		this.g=g;
    	this.points=new ArrayList<X>(g.sizeVertices());
	}
	
	public double attractiveForce(double distance) {
		return c1*(Math.log(distance/c2));
	}
	
	public double repulsiveForce(double distance) {
		return c3/Math.sqrt(distance);
	}
	
	public void setRandomPoints(int n) {
		throw new Error("Spring drawing: a'completer");
	}

	/**
	 * compute the drawing of a planar graph iteratively
	 * using the Force-Directed paradigm.
	 * Positions of vertices are updated according to their
	 * mutual attractive and repulsive forces.
	 */	
	public void computeDrawing() {
		throw new Error("Spring drawing: a'completer");
	}
	
	public Vector_ computeRepulsiveForce(int vertex) {
		throw new Error("Spring drawing: a'completer");
	}

	public Vector_ computeAttractiveForce(int vertex) {
		throw new Error("Spring drawing: a'completer");
	}

	/**
	 * Test SpringDrawing methods
	 */
	public static void main(String[] args) {
		System.out.println("Force directed methods, spring model in 2D");
		Graph g=AdjacencyGraph.constructDodecahedron();
		System.out.println("graph initialized");
		
		SpringDrawing_2<Point_2> d= new SpringDrawing_2<Point_2>(g);
		d.computeDrawing();
		System.out.println("planar representation computed");
		d.draw2D();
		
	}
}

