Commit a1cf616c authored by Grand Francois's avatar Grand Francois
Browse files

courbes de remous : modif du graphique pour dessiner le ressaut : l'algo de...

courbes de remous : modif du graphique pour dessiner le ressaut : l'algo de détection du ressaut n'écrase plus les valeurs à l'extrémité des lignes fluviale et torrentielle, on ajoute désormais des points pour "fermer" le ressaut
Showing with 68 additions and 0 deletions
+68 -0
......@@ -157,6 +157,64 @@ export class RemousResultsComponent {
return { label: lbl, data: ys, fill: fillColor != undefined, tension: 0, borderColor: color, backgroundColor: fillColor, pointRadius: 0 };
}
private searchObjectInArray(array: any[], key: string, value: any) {
for (let o of array)
if (o[key] == value)
return o;
return undefined;
}
private connectRessaut(tX: string[], dataFlu: any[], dataTor: any[]) {
tX.sort((a, b) => {
if (+a > +b)
return 1;
if (+a < +b)
return -1;
return 0;
});
let minXflu; // abscisse de début de la courbe fluviale
for (let x of tX) {
let r = this.searchObjectInArray(this._results, "abs", x);
if (r["flu"] != "") {
minXflu = x;
break;
}
}
if (minXflu != undefined && minXflu != tX[0]) {
// la courbe fluviale ne démarre pas au début, on ajoute un point de raccord avec la ligne torrentielle
let i = tX.indexOf(minXflu);
let xflu = tX[i - 1];
let tor = this.searchObjectInArray(dataTor, "x", xflu);
let yflu = tor["y"];
dataFlu.unshift({ "x": +xflu, "y": yflu }); // ill faut insérer le point au bon endroit car ChartJS ignore le champ "x"...
}
let maxXtor; // abscisse de fin de la courbe torrentielle
tX.reverse();
for (let x of tX) {
let r = this.searchObjectInArray(this._results, "abs", x);
if (r["tor"] != "") {
maxXtor = x;
break;
}
}
tX.reverse();
if (maxXtor != undefined && maxXtor != tX[tX.length - 1]) {
// la courbe torrentielle ne finit pas à la fin des abscisses, on ajoute un point de raccord avec la ligne fluviale
let i = tX.indexOf(maxXtor);
let xflu = tX[i + 1];
let flu = this.searchObjectInArray(dataFlu, "x", xflu);
let yflu = flu["y"];
dataTor.push({ "x": +xflu, "y": yflu });
}
}
public generateGraph() {
// http://www.chartjs.org/docs/latest/charts/line.html
......@@ -190,11 +248,14 @@ export class RemousResultsComponent {
let dataFlu = [];
let dataTor = [];
let dataExtra = [];
let tX = [];
for (let r of this._results) {
let x: number = +r["abs"];
let yFlu: string = r["flu"];
let yTor: string = r["tor"];
tX.push(r["abs"]);
let yExtra: string = r["extraFlu"];
if (yExtra == "")
yExtra = r["extraTor"];
......@@ -210,6 +271,13 @@ export class RemousResultsComponent {
ds2.push({ label: this._extraParamLabel, data: dataExtra, tension: 0, borderColor: "#0093BD", pointRadius: 5 });
else
ds1.push({ label: this._extraParamLabel, data: dataExtra, tension: 0, borderColor: "#C17AF0", pointRadius: 5 });
// raccordement ligne fluviale -> torrentielle pour dessiner le ressaut
this.connectRessaut(tX, dataFlu, dataTor);
// ajout des données au graphique
ds1.push({ label: "Ligne d'eau torrentielle", data: dataTor, tension: 0, borderColor: "#77A3CD", pointRadius: 5, backgroundColor: "#D1D0D4" });
ds1.push({ label: "Ligne d'eau fluviale", data: dataFlu, tension: 0, borderColor: "#0093BD", pointRadius: 5, backgroundColor: "#D1D0D4" });
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment