Menu

Calcul angle moyen avec itérations non listés [Résolu]

GeGaX 83 Messages postés mardi 20 février 2018Date d'inscription 15 mai 2018 Dernière intervention - 20 févr. 2018 à 21:43 - Dernière réponse : GeGaX 83 Messages postés mardi 20 février 2018Date d'inscription 15 mai 2018 Dernière intervention
- 4 avril 2018 à 23:55
Bonjour,

J'ai une extension Google Chrome qui m'extrait les valeurs d'une page web et qui me liste les instructions sous forme de tableau

Le rendu du popup.html me donne ceci :



La dessus tout va bien pas de soucis ;)

Petite précision qui à son importance, dans la colonne TWA, les valeurs en vert sont positives et les valeurs en rouge sont négatives

Je ne parlerais que de TWA et TWAm ( BTW et BTWm c'est la même chose sauf que cela se passe sur 360° et je possède déjà le minuscule bout de code me permettant de faire la conversion)

[COURS RELOU ... ] En navigation maritime, le vert c'est à droite et on l'appelle tribord ; le rouge c'est à gauche et on l'appelle bâbord. Tribord et Bâbord sont donc 2 "cotés" différents que l'on appelle "bords" [/ COURS RELOU ...]

TWAm ne fait pas parti des valeurs extraites puis listées, c'est une valeur calculée.

# Pour les 2 premières lignes les valeurs sont rouges donc c'est le même bord ( cf COURS RELOU ... ; valeurs négatives)
de T+0:00 pour aller à T+0:10: je dois faire du -45°

de T+0:00 pour aller à T +0:30: (-45 + -50) / 2 ? , ben nan ... il y a une itération non listée ( T +0:20 = -50° ) donc le calcul sera donc (-45 + - 50 + -50) / 3 = -48,3°

# Pour la ligne suivante, les valeurs sont vertes donc changement de bord ( je remet pas le cf et ce qui va avec )
donc la valeur TWA de T +0:30 devient la valeur de réference comme si elle était T +0:00 et la logique de calcul est identique à l'exemple des 2 premieres lignes décrite ci dessus.

Oui MAIS cette logique de calcul est fausse ..., il faut passer par la trigonométrie si on travail avec des angles.

On m'a donné ce code : (Qui fait parfaitement le travail quand on lui rentre les valeurs à la main)

{ 
    const
        anglesMesuré = [ 276, 271, 270, 273, 274, 277 ],
        converDegEnRadian = Math.PI / 180.0,
        converRadianEnDeg = 180.0 / Math.PI;

    let
        arX = [],
        arY = [],
        sommeX = 0.0,
        sommeY = 0.0,
        moyenneX = 0.0,
        moyenneY = 0.0,
        angleMoyen = 0.0;

    for ( const [ i, angle ] of anglesMesuré.entries() ){
        arX[ i ] = Math.cos( angle * converDegEnRadian );
        arY[ i ] = Math.sin( angle * converDegEnRadian );
    }

    for ( const value of arX ){
        sommeX += value;
    }

    moyenneX = sommeX / arX.length;

    for ( const value of arY ){
        sommeY += value;
    }

    moyenneY = sommeY / arY.length;

    angleMoyen = Math.round ( ( Math.atan2( moyenneY, moyenneX ) * converRadianEnDeg ) * 10 ) / 10;

    console.log( `L'angle moyen du vent est de ${angleMoyen}°` );
}


Je souhaiterais mettre en place une fonction qui s'appellerais twam et qui aurait pour argument time ou ttw et twa ( il en faut peut être d'autres ... ) - function twam (time ou ttw, twa) {un code similaire à celui du dessus}
et la est mon soucis ( d'ou le post ) avec prise en compte des itérations manquantes ...

Je vous transmet le popup.js actuelle, tout ce qui concerne TWAm et BTWm est commenté dans le code.

Je suis preneur de toutes infos pouvant m'aider à réaliser cette fonction twam qui automatiserait de façon valide, ce coup ci, le calcul de moyenne limité au bord et qui recommencerait pour le bord suivant et ainsi de suite.

popus.js :

var background = [/download/telecharger-34056452-google-chrome chrome].extension.getBackgroundPage();

/*
var hour_actu = 0;
var hour_change = 0;
var hour_prec = 0;
var nb_step = 0;

var twam = 0;
var twa_prec = 0;
var tot_twa_prec = 0;
var tot_twa = 0;

var btwm = 0;
var btw_prec = 0;
var tot_btw_prec = 0;
var tot_btw = 0;

var twa_btw_change = 0;
*/

function createCell(value, row) {
    var cell = document.createElement("td");
    cell.innerHTML = value;
    row.appendChild(cell);
}

function ttwStyling(value, cell) {
    cell.align = "left";
    cell.innerHTML = value;
}

function dtwStyling(value, cell) {
    cell.align = "left";
    cell.innerHTML = value;
}

function dtgStyling(value, cell) {
    cell.align = "left";
    cell.innerHTML = value;
}

function twsStyling(value1, value2, cell) {
    var tws_foil = value1.replace(" kt", "");
    var twa_bd = value2.replace("\u00B0", "");
    if (tws_foil >= 11.1 && tws_foil <= 39.9 && Math.abs(twa_bd) >= 71 && Math.abs(twa_bd) <= 169) {
        cell.style.backgroundColor = "black";
        cell.style.color = "white";
    } else {
        cell.style.backgroundColor = "white";
        cell.style.color = "black";
    }
    cell.innerHTML = tws_foil + " kt";
}

function twaStyling(value, cell) {
    var twa_bd = value.replace("\u00B0", "");
    if (twa_bd >= 0) {
        cell.style.color = "green";
    } else {
        cell.style.color = "red";
    }
    cell.innerHTML = Math.abs(twa_bd) + "\u00B0";
}

function btwStyling(value, cell) {
    cell.style.color = "blue";
    cell.innerHTML = value;
}

function sailStyling(value, cell) {
    switch (value.trim()) {
        // Upwind sail
        case "Jib":
            cell.style.backgroundColor = "#FFD479";
            break;
        case "LJ":
            cell.style.backgroundColor = "#FFFC79";
            break;
        case "Stay":
            cell.style.backgroundColor = "#D4FB79";
            break;
        // Downwind sail
        case "Spi":
            cell.style.backgroundColor = "#76D6FF";
            break;
        case "LG":
            cell.style.backgroundColor = "#7A81FF";
            break;
        case "HG":
            cell.style.backgroundColor = "#D783FF";
            break;
        // Reaching sail
        case "C0":
            cell.style.backgroundColor = "#FF7E79";
            break;
    }
    cell.innerHTML = value;
}

function twamStyling(value, cell) {
    if (value >= 0) {
        cell.style.color = "green";
    } else {
        cell.style.color = "red";
    }
    if (value != "-") {
        cell.innerHTML = Math.abs(value) + "\u00B0";
    } else {
        cell.style.color = "black";
        cell.innerHTML = value;
    }
}

function btwmStyling(value, cell) {
    cell.style.color = "blue";
    if (value != "-") {
        cell.innerHTML = value + "\u00B0";
    } else {
        cell.style.color = "black";
        cell.innerHTML = value;
    }
}

function createCellWithCustomStyling(value, row, customStyling) {
    var cell = document.createElement("td");
    customStyling(value, cell);
    row.appendChild(cell);
}

function createCellWithCustomStyling2(value1, value2, row, customStyling) {
    var cell = document.createElement("td");
    customStyling(value1, value2, cell);
    row.appendChild(cell);
}

/*
function calc_nb_ite(value) {
    var delta_t = value.match(/.*?([0-9]{1,}):([0-9]{2})/);
    hour_prec = hour_actu;
    hour_actu = delta_t[1] * 6 + delta_t[2] / 10;
    nb_step = hour_actu - hour_prec;
}

function calc_twam(value) {
    ss_tot = parseFloat(value.replace("\u00B0", ""));
    tot_twa = tot_twa_prec + (twa_prec * nb_step);
    if (hour_actu == hour_change) {
        twam = "-";
    } else {
        twam = tot_twa / (hour_actu - hour_change);
        twam = Math.round(twam);
    }
    tot_twa_prec = tot_twa;
    twa_btw_change = 0;
    if ((twa_prec * ss_tot) <= 0) {
        tot_twa_prec = 0;
        twa_btw_change = 1;
    }
    twa_prec = ss_tot;
}

function calc_btwm(value) {
    ss_tot = parseFloat(value.replace("\u00B0", ""));
    // N1
    if (btwm >= 270 && btw_prec <= 90) {
        btw_prec = btw_prec + 360;
    } else {
        if (btwm <= 90 && btw_prec >= 270) {
            btw_prec = btw_prec - 360;
        }
    }
    // End N1
    tot_btw = tot_btw_prec + (btw_prec * nb_step);
    if (hour_actu == hour_change) {
        btwm = "-";
    } else {
        btwm = tot_btw / (hour_actu - hour_change);
        // N2
        if (btwm >= 360) {
            btwm = btwm - 360;
        } else {
            if (btwm < 0) {
                btwm = btwm + 360;
            }
        }
        // End N2
        btwm = Math.round(btwm);
    }
    tot_btw_prec = tot_btw;
    if (twa_btw_change == 1) {
        tot_btw_prec = 0;
        nb_step = 0;
        hour_prec = hour_actu;
        hour_change = hour_actu;
    }
    btw_prec = ss_tot;
}
*/

function reinitializeDisplay() {
    document.getElementById("pointsTable").innerHTML = "";
}

function UtcToLocal(date, time, timezone) {
    var utcYear = date.split("-")[0];
    var utcMonth = (date.split("-")[1])-1;
    var utcDay = date.split("-")[2];

    var utcHour = time.split(":")[0];
    var utcMinutes = time.split(":")[1];

    var utcTimeZone = timezone[1];

    var dateUtc = Date.UTC(utcYear, utcMonth, utcDay, utcHour, utcMinutes, 0, 0);
    var localDate = new Date(dateUtc);

    var year = localDate.getFullYear();
    var month = ("0"+(localDate.getMonth()+1)).slice(-2);
    var day = ("0"+localDate.getDate()).slice(-2);

    var hours = ("0" + localDate.getHours()).slice(-2);
    var minutes = ("0" + localDate.getMinutes()).slice(-2);

    var offset = -localDate.getTimezoneOffset();
    var absOffset = Math.abs(offset);
    var sign = (offset > 0) ? "+" : "-";
    var hoursOffset = Math.trunc(absOffset) / 60;
    var MinutesHoursOffset = (hoursOffset === 0) ? "\u00b1" + "0" : sign + hoursOffset;
    var minutesOffset = absOffset % 60;
    var HoursMinutesOffset = (minutesOffset === 0) ? MinutesHoursOffset : sign + hoursOffset + ":" + minutesOffset;

    var formattedDate = year + "-" + month + "-" + day;
    var formattedTime = hours + ":" + minutes;
    var formattedTimeZone = "UTC" + HoursMinutesOffset;
    return [formattedDate,formattedTime,formattedTimeZone];
}

function getTimeZone(timezone) {
    if (timezone === "CET") {
        return "UTC+1";
    } else if (timezone === "CEST") {
        return "UTC+2";
    }
}

function displayTable(localTime) {
    points.forEach(function (element) {
        var row = document.createElement("tr");
        document.getElementById("pointsTable").appendChild(row);
        if (localTime && element.timezone === "CET" | "CEST") {
            var ceTZ = getTimeZone(element.timezone);
            createCell(element.date, row);
            createCell(element.time, row);
            createCell(ceTZ, row)
        } else if (localTime && element.timezone === "UTC") {
            var localDTZ = UtcToLocal(element.date,element.time,element.timezone);
            createCell(localDTZ[0], row);
            createCell(localDTZ[1], row);
            createCell(localDTZ[2], row);
        } else {
            createCell(element.date, row);
            createCell(element.time, row);
            createCell(element.timezone, row)
        }
        createCellWithCustomStyling(element.ttw, row, ttwStyling);
        //calc_nb_ite(element.ttw);
        createCellWithCustomStyling(element.dtw, row, dtwStyling);
        createCellWithCustomStyling(element.dtg, row, dtgStyling);
        createCell(element.twd, row);
        createCellWithCustomStyling2(element.tws, element.twa, row, twsStyling);
        createCellWithCustomStyling(element.twa, row, twaStyling);
        //calc_twam(element.twa);
        createCellWithCustomStyling(element.btw, row, btwStyling);
        //calc_btwm(element.btw);
        createCellWithCustomStyling(element.sail, row, sailStyling);
        createCell(element.stw, row);
        createCellWithCustomStyling(twam, row, twamStyling);
        createCellWithCustomStyling(btwm, row, btwmStyling);
        var manifest = chrome.runtime.getManifest();
        document.getElementById("version").innerHTML = manifest.version;
    });
}

var displayLocal = function () {
    reinitializeDisplay();
    if (document.getElementById("localtime").checked) {
        chrome.storage.local.set({"localTime" : true});
        displayTable(true);
    } else {
        chrome.storage.local.set({"localTime" : false});
        displayTable(false);
    }
};

document.getElementById("localtime").addEventListener("change", displayLocal);

chrome.storage.local.get("localTime",function (result) {
    if(result.localTime === true){
        document.getElementById("localtime").checked = true;
        displayLocal();
    } else {
        document.getElementById("localtime").checked = false;
    }
});
reinitializeDisplay();
var points = background.points[background.currentTab];
displayTable(false);

S'il vous faut autre chose ( popup.html ou autre fichier composant l'extension je vous les fournirais avec grand plaisir )

Merci d'avoir pris le temps de me lire et au plaisir de vous lire ;)


Afficher la suite 

Votre réponse

127 réponses

Help-Jason 1859 Messages postés mardi 28 juin 2011Date d'inscription 31 mai 2018 Dernière intervention - 21 févr. 2018 à 19:15
0
Merci
Dans un premier temps, créé une fonction qui renvoie sous la forme d'une liste l'ensemble des valeurs qu'il te faut. Elle sera chargée de l'extraction des données.

Pour chaque element de
var points = background.points[background.currentTab];
, il faut utiliser les fonctions suivantes :
calc_nb_ite(element.ttw);
calc_twam(element.twa);


et récupérer la valeur de la variable globale twam et la stocker dans une liste.

Help-Jason 1859 Messages postés mardi 28 juin 2011Date d'inscription 31 mai 2018 Dernière intervention - 3 avril 2018 à 08:19
Il faut bien que tu places ce code avant d'avoir afficher le tableau.

Ensuite :
while (points[i].ttw !== ttwLast) {
        twaList.push(parseInt(twaLast,10));
        btwList.push(parseInt(btwLast,10));
        ttwLast = genIteNext(ttwLast);
        //points[i].twam = twamCalc(twaList);
        //points[i].btwm = btwmCalc(btwList);
    }


Il ne faut pas les deux lignes commentées car la taille de points est inférieur à la taille du tableau qu'on génère. En particulier, ce bout de code est responsable de l'ajout des valeurs intermédiaires.
GeGaX 83 Messages postés mardi 20 février 2018Date d'inscription 15 mai 2018 Dernière intervention - 3 avril 2018 à 22:21
Sur les 2 points ( 3 au final, décalage de ligne, calcul faussé, et chargement ) j'en ai résolu 2 ( décalage de ligne et calcul faussé) il me reste juste l'histoire du chargement au premier clic pas au second ...
voici le popup.js complet
var background = chrome.extension.getBackgroundPage();
var twaList = [];
var btwList = [];
var ttwLast = "T+ 0:00";
var twaLast = undefined;
var btwLast = undefined;

function createCell(value, row) {
    var cell = document.createElement("td");
    cell.innerHTML = value;
    row.appendChild(cell);
}

function ttwStyling(value, cell) {
    cell.align = "left";
    cell.innerHTML = value;
}

function dtwStyling(value, cell) {
    cell.align = "left";
    cell.innerHTML = value;
}

function dtgStyling(value, cell) {
    cell.align = "left";
    cell.innerHTML = value;
}

function twsStyling(value1, value2, cell) {
    var tws_foil = value1.replace(" kt", "");
    var twa_bd = value2.replace("\u00B0", "");
    if (tws_foil >= 11.1 && tws_foil <= 39.9 && Math.abs(twa_bd) >= 71 && Math.abs(twa_bd) <= 169) {
        cell.style.backgroundColor = "black";
        cell.style.color = "white";
    } else {
        cell.style.backgroundColor = "white";
        cell.style.color = "black";
    }
    cell.innerHTML = tws_foil + " kt";
}

function twaStyling(value, cell) {
    var twa_bd = value.replace("\u00B0", "");
    if (twa_bd >= 0) {
        cell.style.color = "green";
    } else {
        cell.style.color = "red";
    }
    cell.innerHTML = Math.abs(twa_bd) + "\u00B0";
}

function btwStyling(value, cell) {
    cell.style.color = "blue";
    cell.innerHTML = value;
}

function sailStyling(value, cell) {
    switch (value.trim()) {
    // Upwind sail
    case "Jib":
        cell.style.backgroundColor = "#FFD479";
        break;
    case "LJ":
        cell.style.backgroundColor = "#FFFC79";
        break;
    case "Stay":
        cell.style.backgroundColor = "#D4FB79";
        break;
    // Downwind sail
    case "Spi":
        cell.style.backgroundColor = "#76D6FF";
        break;
    case "LG":
        cell.style.backgroundColor = "#7A81FF";
        break;
    case "HG":
        cell.style.backgroundColor = "#D783FF";
        break;
    // Reaching sail
    case "C0":
        cell.style.backgroundColor = "#FF7E79";
        break;
    }
    cell.innerHTML = value;
}

function twamStyling(value, cell) {
    if (value >= 0) {
        cell.style.color = "green";
    } else {
        cell.style.color = "red";
    }
    if (value !== "-") {
        cell.innerHTML = Math.abs(value) + "\u00B0";
    } else {
        cell.style.color = "black";
        cell.innerHTML = value;
    }
}

function btwmStyling(value, cell) {
    cell.style.color = "blue";
    if (value !== "-") {
        cell.innerHTML = value + "\u00B0";
    } else {
        cell.style.color = "black";
        cell.innerHTML = value;
    }
}

function createCellWithCustomStyling(value, row, customStyling) {
    var cell = document.createElement("td");
    customStyling(value, cell);
    row.appendChild(cell);
}

function createCellWithCustomStyling2(value1, value2, row, customStyling) {
    var cell = document.createElement("td");
    customStyling(value1, value2, cell);
    row.appendChild(cell);
}

function twamCalc(twaList) {
    const
    twaData = twaList;
    Math.radians = function (degrees) {
        return degrees * Math.PI / 180.0;
    },
    Math.degrees = function (radians) {
        return radians * 180.0 / Math.PI;
    };
 
    let
    arX = [],
    arY = [],
    somX = 0.0,
    somY = 0.0,
    moyX = 0.0,
    moyY = 0.0,
    twam = 0.0;
    
    for (const [i, angle] of twaData.entries()) {
        arX[i] = Math.cos(Math.radians(angle));
        arY[i] = Math.sin(Math.radians(angle));
    }
 
    for (const value of arX) {
	   somX += value;
    }
    moyX = somX / arX.length;
 
    for (const value of arY) {
	   somY += value;
    }
    moyY = somY / arY.length;
    
    twam = Math.round((Math.degrees(Math.atan2(moyY, moyX)) * 10)) / 10;
    if (isNaN (twam)) {
        twam = "-";
    }
    return twam ;
}

function btwmCalc(btwList) {
    const
    btwData = btwList;
    Math.radians = function (degrees) {
        return degrees * Math.PI / 180.0;
    },
    Math.degrees = function (radians) {
        return radians * 180.0 / Math.PI;
    };
 
    let
    arX = [],
    arY = [],
    somX = 0.0,
    somY = 0.0,
    moyX = 0.0,
    moyY = 0.0,
    btwm = 0.0;
 
    for (const [i, angle] of btwData.entries()) {
        arX[i] = Math.cos(Math.radians(angle));
        arY[i] = Math.sin(Math.radians(angle));
    }
 
    for (const value of arX) {
	   somX += value;
    }
    moyX = somX / arX.length;
 
    for (const value of arY) {
	   somY += value;
    }
    moyY = somY / arY.length;
    
    btwm = Math.round((Math.degrees(Math.atan2(moyY, moyX)) * 10))/ 10;
    if (isNaN (btwm)) {
        btwm = "-";
    } else if (btwm < 0) {
        btwm += 360;
    }
    return btwm;
}

function reinitializeDisplay() {
    document.getElementById("pointsTable").innerHTML = "";
}

function UtcToLocal(date, time) {
    var utcYear = date.split("-")[0];
    var utcMonth = (date.split("-")[1]) - 1;
    var utcDay = date.split("-")[2];
    var utcHour = time.split(":")[0];
    var utcMinutes = time.split(":")[1];
    var dateUtc = Date.UTC(utcYear, utcMonth, utcDay, utcHour, utcMinutes, 0, 0);
    
    var localDate = new Date(dateUtc);
    var year = localDate.getFullYear();
    var month = ("0" + (localDate.getMonth() + 1)).slice(-2);
    var day = ("0" + localDate.getDate()).slice(-2);
    var hours = ("0" + localDate.getHours()).slice(-2);
    var minutes = ("0" + localDate.getMinutes()).slice(-2);

    var offset = -localDate.getTimezoneOffset();
    var absOffset = Math.abs(offset);
    var sign = (offset > 0) ? "+" : "-";
    var hoursOffset = Math.trunc(absOffset) / 60;
    var MinutesHoursOffset = (hoursOffset === 0) ? "\u00b1" + "0" : sign + hoursOffset;
    var minutesOffset = absOffset % 60;
    var HoursMinutesOffset = (minutesOffset === 0) ? MinutesHoursOffset : sign + hoursOffset + ":" + minutesOffset;

    var formattedDate = year + "-" + month + "-" + day;
    var formattedTime = hours + ":" + minutes;
    var formattedTimeZone = "UTC" + HoursMinutesOffset;
    return [formattedDate, formattedTime, formattedTimeZone];
}

function getTimeZone(timezone) {
    if (timezone === "CET") {
        return "UTC+1";
    } else if (timezone === "CEST") {
        return "UTC+2";
    }
}

function displayTable(localTime) {
    points.forEach(function (element) {
        var row = document.createElement("tr");
        document.getElementById("pointsTable").appendChild(row);
        if ((localTime && element.timezone === "CET") || (localTime && element.timezone === "CEST")) {
            var ceZ = getTimeZone(element.timezone);
            createCell(element.date, row);
            createCell(element.time, row);
            createCell(ceZ, row);
        } else if (localTime && element.timezone === "UTC") {
            var localDTZ = UtcToLocal(element.date, element.time, element.timezone);
            createCell(localDTZ[0], row);
            createCell(localDTZ[1], row);
            createCell(localDTZ[2], row);
        } else {
            createCell(element.date, row);
            createCell(element.time, row);
            createCell(element.timezone, row);
        }
        createCellWithCustomStyling(element.ttw, row, ttwStyling);
        createCellWithCustomStyling(element.dtw, row, dtwStyling);
        createCellWithCustomStyling(element.dtg, row, dtgStyling);
        createCell(element.twd, row);
        createCellWithCustomStyling2(element.tws, element.twa, row, twsStyling);
        createCellWithCustomStyling(element.twa, row, twaStyling);
        createCellWithCustomStyling(element.btw, row, btwStyling);
        createCellWithCustomStyling(element.sail, row, sailStyling);
        createCell(element.stw, row);
        createCellWithCustomStyling(element.twam, row, twamStyling);
        createCellWithCustomStyling(element.btwm, row, btwmStyling);
        var manifest = chrome.runtime.getManifest();
        document.getElementById("version").innerHTML = manifest.version;
    });
}

var displayLocal = function () {
    reinitializeDisplay();
    if (document.getElementById("localtime").checked) {
        chrome.storage.local.set({"localTime" : true});
        displayTable(true);
    } else {
        chrome.storage.local.set({"localTime" : false});
        displayTable(false);
    }
};

document.getElementById("localtime").addEventListener("change", displayLocal);

chrome.storage.local.get("localTime", function (result) {
    if (result.localTime === true) {
        document.getElementById("localtime").checked = true;
        displayLocal();
    } else {
        document.getElementById("localtime").checked = false;
    }
});
reinitializeDisplay();
var points = background.points[background.currentTab];
displayTable(false);

function space(val) {
    if (val < 10) {
        val = " " + val;
    }
    return val;
}

function zero(val) {
    if (val < 10) {
        val = "0" + val;
    }
    return val;
}

function genIteNext (ttwCurr) {
    var ttwCurr = ttwCurr.match(/.*?([0-9]{1,3}):([0-9]{2})/);
    var ttwHours = parseInt(ttwCurr[1], 10);
    var ttwMinutes = parseInt(ttwCurr[2], 10);
    var ttwNext = [];
    if (ttwMinutes + 10 < 60) {
        ttwNext = "T+" + space (ttwHours) + ":" + zero (ttwMinutes + 10);
    } else {
        ttwNext = "T+" + space (ttwHours + 1) + ":" + zero (ttwMinutes - 50);
    }
    return ttwNext;
}

for (var i = 0; i < points.length; i++) {
    points[i].twam = twamCalc(twaList);
    points[i].btwm = btwmCalc(btwList);
    while (points[i].ttw !== ttwLast) {
        twaList.push(parseInt(twaLast,10));
        btwList.push(parseInt(btwLast,10));
        ttwLast = genIteNext(ttwLast);
    }
    twaLast = parseInt(points[i].twa, 10);
    btwLast = parseInt(points[i].btw, 10);
    if (twaList.length === 0) {
        twaList.push(twaLast);
        btwList.push(btwLast);
    } else if (twaList[0] * twaLast < 0) {
        twaList = [twaLast];
        btwList = [btwLast];
    } else {
        twaList.push(twaLast);
        btwList.push(btwLast);
    }
    ttwLast = genIteNext(ttwLast);
}


Concernant le chargement, là je bloque ...dès que je déplace le code qu'on à créé au dessus de la fonction
displayTable
il n'est plus capable de comprendre
points.length
j'suis vert je croyais dur comme fer que j'allais pouvoir sortir la MAJ ce soir mais nan ... J'veux bien un dernier coup de pouce stp :/
GeGaX 83 Messages postés mardi 20 février 2018Date d'inscription 15 mai 2018 Dernière intervention - 3 avril 2018 à 23:07
J'viens de m'apercevoir que je t'ai pas indiqué les modifs ...

points[i].twam et points[i].btwm ont été déplacés avant while
for (var i = 0; i < points.length; i++) {
    points[i].twam = twamCalc(twaList);
    points[i].btwm = btwmCalc(btwList);
    while (points[i].ttw !== ttwLast) {
        twaList.push(parseInt(twaLast,10));
        btwList.push(parseInt(btwLast,10));
        ttwLast = genIteNext(ttwLast);
    }
    twaLast = parseInt(points[i].twa, 10);
    btwLast = parseInt(points[i].btw, 10);
    if (twaList.length === 0) {
        twaList.push(twaLast);
        btwList.push(btwLast);
    } else if (twaList[0] * twaLast < 0) {
        twaList = [twaLast];
        btwList = [btwLast];
    } else {
        twaList.push(twaLast);
        btwList.push(btwLast);
    }
    ttwLast = genIteNext(ttwLast);
}


Ce qui pour la ligne T+ 0:00, me renvoyait
NaN°
en valeur twam et btwm que je "gère" dans la fonction twamCalc et btwmCalc par
twam:
twam = Math.round((Math.degrees(Math.atan2(moyY, moyX)) * 10)) / 10;
    if (isNaN (twam)) {
        twam = "-";
    }
    return twam ;

btwm:
btwm = Math.round((Math.degrees(Math.atan2(moyY, moyX)) * 10))/ 10;
    if (isNaN (btwm)) {
        btwm = "-";
    } else if (btwm < 0) {
        btwm += 360;
    }
    return btwm;

Ça fait correctement le job ;)

Dernière et ultime étape le chargement en un clic ( déplacement du code apparement mais où ça c'est mystère et boules de gomme ... )
Help-Jason 1859 Messages postés mardi 28 juin 2011Date d'inscription 31 mai 2018 Dernière intervention - 4 avril 2018 à 12:30
Je placerai le code entre les deux lignes suivantes :
var points = background.points[background.currentTab];
// CODE ICI
displayTable(false);
GeGaX 83 Messages postés mardi 20 février 2018Date d'inscription 15 mai 2018 Dernière intervention - 4 avril 2018 à 23:55
Alors là chapeauX l'artiste !
Chapeau déjà pour ta pédagogie, j'ai appris énormément de choses en JS, chapeau pour ta patience il a du t'en falloir lorsque je galérais et posais des questions en permanence ...
et un grand MERCI de m'avoir aidé, guidé tout au long du truc.
Commenter la réponse de Help-Jason