An error occurred while loading the file. Please try again.
-
guillaume.garbay authored
No commit message
70378295
package pikelake;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.StringTokenizer;
import pikelake.Cell;
import pikelake.environment.AreaMovement;
import pikelake.pikes.Pike;
import fr.cemagref.simaqualife.extensions.spatial2D.Grid2D;
import fr.cemagref.simaqualife.kernel.AquaNismsGroup;
import fr.cemagref.simaqualife.kernel.util.TransientParameters.InitTransientParameters;
import fr.cemagref.simaqualife.pilot.Pilot;
public class Grid extends Grid2D<Cell, Individual> {
public Grid(int gridWidth, int gridHeight, NeighborsType neighborsType) {
super(gridWidth, gridHeight, neighborsType);
// TODO Auto-generated constructor stub
}
/**
* Declaration + Initialisation de la grille avec les HSI de chaque cellule
*
*/
@InitTransientParameters
public void initTransientParameters(Pilot pilot) throws FileNotFoundException {
StringTokenizer sLigne;
@SuppressWarnings("unused")
double hsiStd = 0, hsiMoy = 0;
int idCell = 0, yPike = 0, xPike = 0;
// Initialisation grille vide
grid = new Cell[gridWidth * gridHeight];
// Initialisation de toute la grille avec hsi = -1
for (int cptCell = 0; cptCell < (gridWidth * gridHeight - 1); cptCell++) {
grid[cptCell] = new Cell(cptCell, -1);
}
// Lecture fichier contenant les HSI de toutes les mailles
String filePath = "data/input/HSI/hsi_BROETE507.txt";
Scanner scanner = new Scanner(new File(filePath));
// Initialisation de chaque cellule contenant HSI
// On boucle sur chaque ligne detecte
String line = scanner.nextLine();
while (scanner.hasNextLine()) {
line = scanner.nextLine();
// Decoupage ligne : id, hsiStd, hsiMoy
sLigne = new StringTokenizer (line);
if (sLigne.hasMoreTokens())
idCell = Integer.parseInt(sLigne.nextToken())-1;
if (sLigne.hasMoreTokens())
hsiStd = Double.parseDouble(sLigne.nextToken());
if (sLigne.hasMoreTokens())
hsiMoy = Double.parseDouble(sLigne.nextToken());
// Conversion idCell en coordonnees (x, y)
// (x, y) avec les id de cellules de 0 n-1
yPike = (int) Math.floor(idCell / gridWidth);
xPike = (int) idCell - (yPike * gridWidth);
// Inversion des coordonnees en Y (place l'origine en bas gauche)
yPike = (gridHeight-1) - yPike ;
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
// Conversion des coordonnees (x, y) en idCell
idCell = xPike + yPike * gridWidth;
// Initialisation du hsi de la cellule(idCell)
grid[idCell] = new Cell(idCell, hsiMoy);
}
scanner.close();
}
/* public void doProcess (Pilot pilot) throws FileNotFoundException {
StringTokenizer sLigne;
@SuppressWarnings("unused")
double hsiStd = 0, hsiMoy = 0;
int idCell = 0, yPike = 0, xPike = 0;
// Initialisation grille vide
grid = new Cell[gridWidth * gridHeight];
// Initialisation de toute la grille avec hsi = -1
for (int cptCell = 0; cptCell < (gridWidth * gridHeight - 1); cptCell++) {
grid[cptCell] = new Cell(cptCell, -1);
}
// Lecture fichier contenant les HSI de toutes les mailles
String filePath = "data/input/HSI/hsi_BROETE507.txt";
Scanner scanner = new Scanner(new File(filePath));
// Initialisation de chaque cellule contenant HSI
// On boucle sur chaque ligne detecte
String line = scanner.nextLine();
while (scanner.hasNextLine()) {
line = scanner.nextLine();
// Decoupage ligne : id, hsiStd, hsiMoy
sLigne = new StringTokenizer (line);
if (sLigne.hasMoreTokens())
idCell = Integer.parseInt(sLigne.nextToken())-1;
if (sLigne.hasMoreTokens())
hsiStd = Double.parseDouble(sLigne.nextToken());
if (sLigne.hasMoreTokens())
hsiMoy = Double.parseDouble(sLigne.nextToken());
// Conversion idCell en coordonnees (x, y)
// (x, y) avec les id de cellules de 0 n-1
yPike = (int) Math.floor(idCell / gridWidth);
xPike = (int) idCell - (yPike * gridWidth);
// Inversion des coordonnees en Y (place l'origine en bas gauche)
yPike = (gridHeight-1) - yPike ;
// Conversion des coordonnees (x, y) en idCell
idCell = xPike + yPike * gridWidth;
// Initialisation du hsi de la cellule(idCell)
grid[idCell] = new Cell(idCell, hsiMoy);
}
scanner.close();
}*/
public void addAquaNism(Individual ind, AquaNismsGroup<?, ?> group) {
super.addAquaNism(ind, group);
ind.getPosition().addPike((Pike) ind);
}
public void moveAquaNism(Individual ind, AquaNismsGroup<?, ?> group, Cell dest) {
super.moveAquaNism(ind, group, dest);
this.removeAquaNism(ind, group);
dest.addPike((Pike) ind);
}
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
public void removeAquaNism(Individual ind, AquaNismsGroup<?, ?> group) {
super.removeAquaNism(ind, group);
ind.getPosition().removePike((Pike) ind);
}
/**
* Calcul des cellules accessibles (comprise dans le lac)
* entrees : position : id de la cellule initiale
* distance : distance maximum que peut parcourir l'individu
* sortie : neighbours : liste des cellules (id) accessibles
*
*/
public List<Cell> getNeighbours(Cell position) {
List<Cell> neighbours = new ArrayList<Cell>();
List<String> listeCoord = null;
int xPike = 0, yPike = 0;
// Calcul des coordonnees (x, y) a partir de l'Id de la maille
yPike = (position.getIndex() / gridWidth);
xPike = (position.getIndex() - (yPike * gridWidth));
// Calcul de la liste des mailles pour une distance donnee
AreaMovement aa = new AreaMovement("ETE","AUBE");
listeCoord = aa.getArea();
// Calcul des mailles comprises dans le lac
for (String liste : listeCoord) {
String[] coord = liste.split(" ");
int newCell = xPike + Integer.parseInt(coord[0]) + (yPike + Integer.parseInt(coord[1])) * gridWidth;
if (newCell >= 0 & newCell <= (gridWidth * gridHeight)-2) { // Pourquoi -2 ?? => -1 donne une erreur pour la case n52 703 ...
if (getCell(newCell).getHabitatQuality() >= 0) {
neighbours.add(getCell(newCell));
}
}
}
return neighbours;
}
}