Package isovaleur

Source Code of isovaleur.Isovaleur

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

package isovaleur;

import colormap.PointColor;
import java.util.ArrayList;
import java.util.Iterator;
import projet.DonneesGeo;

/**
*
* @author lotfi
*/
public class Isovaleur {
    /**
     * Determine le signe de chaque point de data en comparaison avec valeur
     * @param data grille
     * @param valeur valeur pour laquelle déterminer l'isovaleur
     */
    public static void determinerSigne(PointColor[][] data, double valeur){
        for(int i = 0; i < data.length; i ++){
            for(int j = 0; j < data[i].length; j++){
                if(data[i][j].getValeur() < valeur){
                    data[i][j].setSigne("-");
                }
                else{
                    data[i][j].setSigne("+");
                }
            }
        }
    }
  
    /**
     * retoune la latitude réelle en fonction de l'échelle
     * @param i
     * @param latMin
     * @param delta
     * @return
     */
    public static double latitudeReelle(int i, double latMin, double delta){
        return i * delta + latMin;
    }
   
    /**
     * Retourne la longitude reelle en fonction de l'echelle
     * @param j
     * @param lonMin
     * @param delta
     * @return
     */
    public static double longitudeReelle(int j, double lonMin, double delta){
        return j * delta + lonMin;
    }
   
   public static DonneesGeo determinerCoord(DonneesGeo donnee1, DonneesGeo donnee2, double valeur){
       DonneesGeo resultat = new DonneesGeo();
       double v1 = donnee1.getConcentration();
       double v2 = donnee2.getConcentration();
       double x1 = donnee1.getLongitude();
       double y1 = donnee1.getLatitude();
       double x2 = donnee2.getLongitude();
       double y2 = donnee2.getLatitude();
       double v = ((valeur - donnee1.getConcentration()) / (donnee2.getConcentration() - donnee1.getConcentration()));
      // System.out.println("v1 = " + v1 + "v2 = " + v2);
       double longitude = ((v2 - valeur) / (v2 - v1)) * x1 + ((valeur - v1) / (v2 - v1)) * x2;
       double latitude = ((v2 - valeur) / (v2 - v1)) * y1 + ((valeur - v1) / (v2 - v1)) * y2;
       resultat.setLongitude(longitude);
       resultat.setLatitude(latitude);
       resultat.setConcentration(valeur);
       return resultat;
   }
  
   /**
    * Génération de la courbe isovaleur pour la valeur valeur
    * @param data
    * @param latMin
    * @param latMax
    * @param delta
    * @param valeur
    * @return
    */
   public static ArrayList<Segment> creerSegments(PointColor[][] data, double valeur, double latMin, double lonMin, double delta){
       ArrayList<Segment> segments = new ArrayList<>();
       ArrayList<DonneesGeo> donneesGeo ;
       DonneesGeo d1,d2,d3,d4;
       d1 = new DonneesGeo();
       d2 = new DonneesGeo();
       d3 = new DonneesGeo();
       d4 = new DonneesGeo();
       for(int i = 0; i < data.length; i++){
           for(int j = 0; j < data[i].length; j++){
               if((i + 1) < data.length && (j + 1) < data[i].length){
                   donneesGeo = new ArrayList<>();
                   d1.setLongitude(longitudeReelle(j, lonMin, delta));
                   d1.setLatitude(latitudeReelle(i, latMin, delta));
                   d1.setConcentration(data[i][j].getValeur());
                   d2.setLongitude(longitudeReelle(j + 1, lonMin, delta));
                   d2.setLatitude(latitudeReelle(i, latMin, delta));
                   d2.setConcentration(data[i][j + 1].getValeur());
                   d3.setLongitude(longitudeReelle(j + 1, lonMin, delta));
                   d3.setLatitude(latitudeReelle(i + 1, latMin, delta));
                   d3.setConcentration(data[i + 1][j + 1].getValeur());
                   d4.setLongitude(longitudeReelle(j, lonMin, delta));
                   d4.setLatitude(latitudeReelle(i + 1, latMin, delta));
                   d4.setConcentration(data[i + 1][j].getValeur());
                   if(!(data[i][j].getSigne()).equals(data[i][j + 1].getSigne()))
                       donneesGeo.add(determinerCoord(d1, d2, valeur));
                   if(!(data[i][j + 1].getSigne()).equals(data[i + 1][j + 1].getSigne()))
                       donneesGeo.add(determinerCoord(d2, d3, valeur));
                   if(!(data[i + 1][j + 1].getSigne()).equals(data[i + 1][j].getSigne()))
                       donneesGeo.add(determinerCoord(d3, d4, valeur));
                   if(!(data[i + 1][j].getSigne()).equals(data[i][j].getSigne()))
                       donneesGeo.add(determinerCoord(d4, d1, valeur));
                   if(donneesGeo.size() > 0)
                  //  System.out.println("sss " + donneesGeo.get(0).getLongitude());
                  
                   if(donneesGeo.size() == 2)
                       segments.add(new Segment(donneesGeo.get(0).getLongitude(),donneesGeo.get(0).getLatitude() , donneesGeo.get(1).getLongitude(),donneesGeo.get(1).getLatitude()));
                   else if(donneesGeo.size() == 4){
                            double moy = (donneesGeo.get(0).getConcentration() + donneesGeo.get(1).getConcentration() + donneesGeo.get(2).getConcentration() + donneesGeo.get(3).getConcentration()) / 4.0;
                            if(moy >= valeur){
                                segments.add(new Segment(donneesGeo.get(0).getLongitude(),donneesGeo.get(0).getLatitude() , donneesGeo.get(3).getLongitude(),donneesGeo.get(3).getLatitude()));
                                segments.add(new Segment(donneesGeo.get(1).getLongitude(),donneesGeo.get(1).getLatitude() , donneesGeo.get(2).getLongitude(),donneesGeo.get(2).getLatitude()));
                            }
                            else{
                                segments.add(new Segment(donneesGeo.get(0).getLongitude(),donneesGeo.get(0).getLatitude() , donneesGeo.get(1).getLongitude(),donneesGeo.get(1).getLatitude()));
                                segments.add(new Segment(donneesGeo.get(2).getLongitude(),donneesGeo.get(2).getLatitude() , donneesGeo.get(3).getLongitude(),donneesGeo.get(3).getLatitude()));
                            }
                      
                   }
               }
           }
       }
       return segments;
   }
  
   public static void afficherSegments(ArrayList<Segment> segs){
       Iterator<Segment> it = segs.iterator();
       while(it.hasNext()){
           Segment s = it.next();
           System.out.println(s.getX1() + " ; " + s.getY1() + " | " + s.getX2() + " ; " + s.getY2());
       }
   }
}
TOP

Related Classes of isovaleur.Isovaleur

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.