package fr.unistra.pelican.util.vectorial.orders; import fr.unistra.pelican.util.Tools; /** * This class represents a set based vector ordering scheme * where the most distant pixels are chosen as extrema. * * it could also be used as a principal axis approximation scheme..?!?! * * @author E.A. * */ public class ExtremeOrdering implements VectorialOrdering { private double[] max; private double[] min; /* * (non-Javadoc) * @see fr.unistra.pelican.util.vectorial.orders.VectorialOrdering#max(double[][]) */ public double[] max(double[][] p) { preprocess(p); return max; } /* * (non-Javadoc) * @see fr.unistra.pelican.util.vectorial.orders.VectorialOrdering#min(double[][]) */ public double[] min(double[][] p) { preprocess(p); return min; } /* * (non-Javadoc) * @see fr.unistra.pelican.util.vectorial.orders.VectorialOrdering#rank(double[][], int) */ public double[] rank(double[][] p,int r) { System.err.println("no ranking implemented"); return null; } private void preprocess(double[][] p) { int p1 = 0; int p2 = 0; double dist = 0.0; for(int i = 0; i < p.length; i++){ for(int j = 0; j < p.length; j++){ double tmp = Tools.euclideanDistance(p[i],p[j]); if(tmp > dist){ dist = tmp; p1 = i; p2 = j; } } } // en uzak iki benegi elde ettik boylece // hangisi daha buyuk..ilk boyutu daha buyuk olan.. if(p[p1][0] > p[p2][0]){ max = p[p1]; min = p[p2]; } else{ max = p[p2]; min = p[p1]; } } /* * (non-Javadoc) * @see fr.unistra.pelican.util.vectorial.orders.VectorialOrdering#max(double[], double[]) */ public double[] max(double[] p,double[] r) { return p; } /* * (non-Javadoc) * @see fr.unistra.pelican.util.vectorial.orders.VectorialOrdering#min(double[], double[]) */ public double[] min(double[] p,double[] r) { return r; } }