Les calculs et mises à jour dans VLM : Différence entre versions
(21 révisions intermédiaires par 5 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | ''Remarques : Il est question ici de moteur. Il ne s'agit pas du moteur du | + | ''Remarques : Il est question ici de moteur. Il ne s'agit pas du moteur du bateau mais du programme ;-) Le terme de vacation signifie calcul.'' |
− | bateau mais du programme ;-) Le terme de vacation signifie calcul.'' | + | |
+ | = Calcul des données météo = | ||
+ | |||
+ | Cf. [[Météo]] | ||
= Déroulement du calcul = | = Déroulement du calcul = | ||
Ligne 6 : | Ligne 9 : | ||
VLM calcule un ensemble de paramètres selon un ordre établi. L'ordre des | VLM calcule un ensemble de paramètres selon un ordre établi. L'ordre des | ||
opérations est le suivant : | opérations est le suivant : | ||
+ | == Application des ordres du pilototo == | ||
− | == | + | Tous les ordres prévus dans l'intervalle de la vacation (plus précisément : les ordres antérieurs à l'heure du moment) sont exécutés (c'est donc le dernier qui a raison quand il y en a plusieurs). |
+ | |||
+ | == Évaluation du nouveau cap si nécessaire (pilote orthodromique, régulateur d'allure, VMG, ou VBVMG) == | ||
'''obtention d'un TWA''' ('''T'''rue '''W'''ind '''A'''ngle) | '''obtention d'un TWA''' ('''T'''rue '''W'''ind '''A'''ngle) | ||
− | == | + | * Régulateur d'allure : le TWA est direct, c'est le paramètre du régulateur d'allure |
+ | * Cap : c'est la différence entre le cap et le vent | ||
+ | * Ortho : Vlm calcul un cap orthodromique vers le WP visé | ||
+ | * BVMG/VBMVG : le pilote calcule une allure à partir du WP visé qui devient le TWA | ||
+ | |||
+ | == Évaluation de la vitesse du bateau en fonction de son TWA == | ||
Le vent pris en considération n'est pas celui qui était calculé | Le vent pris en considération n'est pas celui qui était calculé | ||
Ligne 19 : | Ligne 30 : | ||
== Calcul de la distance parcourue depuis la dernière vacation == | == Calcul de la distance parcourue depuis la dernière vacation == | ||
− | + | Suivant les courses, dans la dernière minute ou dans les 5 dernières donc. | |
+ | Il s'agit de la situation normale. De manière générale, il s'agit de la distance parcourue à l'allure courante dans le différentiel de temps depuis le dernier calcul de vacation. | ||
− | ==Ajout de ce "vecteur de déplacement" à la dernière position du bateau | + | == Ajout de ce "vecteur de déplacement" à la dernière position du bateau == |
Là, il y a plusieurs tests : | Là, il y a plusieurs tests : | ||
* le bateau coupe-t'il la ligne d'arrivée ? | * le bateau coupe-t'il la ligne d'arrivée ? | ||
** Si oui, il est sorti de la course et son classement est enregistré dans la table "classement définitif" (table "races_results") | ** Si oui, il est sorti de la course et son classement est enregistré dans la table "classement définitif" (table "races_results") | ||
− | ** le bateau coupe-t'il un point de passage ? Si oui, mise à jour du prochain point de passage dans la table "users" (qui deviendra | + | ** le bateau coupe-t'il un point de passage ? Si oui, mise à jour du prochain point de passage dans la table "users" (qui deviendra "boats" lorsqu'un "user" pourra (bientôt) gérer plusieurs bateaux. |
− | "boats" lorsqu'un "user" | ||
** pour le cas précédent et son contraire, on cherche à savoir si le bateau coupe un trait de côte : | ** pour le cas précédent et son contraire, on cherche à savoir si le bateau coupe un trait de côte : | ||
+ | *** recherche des deux points de trait de côte les plus proches, et s'ils appartiennent au même trait de côte (il faut tout de même pouvoir passer dans les goulets), on vérifie si le bateau a coupé le segment défini par ces deux points. =XX | ||
+ | *** le segment de distance parcouru par le bateau depuis sa dernière position est découpé en 25 sous-segments, et le traitement (du point précédent) est effectué pour chacun des sous-segments. | ||
+ | |||
+ | == Enregistrement de la nouvelle position == | ||
+ | |||
+ | * '''Calcul des distances parcourues''' sur 1h, 3h, et 24h. | ||
+ | * '''Enregistrement de la position''' et surtout de la distance restant à parcourir jusqu'au prochain point de passage dans la table "classement temporaire" (table "races_ranking")(c'est celle qui est utilisée pour l'affichage des classements de bateaux en course). | ||
+ | * Au passage, cela explique pourquoi il y a des "sauts de 1 mille ou un peu plus" si l'on rafraîchit la page des classements PENDANT les mises à jour. | ||
+ | |||
+ | == Échouement et Abandon en cas d'inactivité == | ||
+ | |||
+ | Si le bateau s'échoue, il est remis en course à proximité de la cote afin de pouvoir repartir. Il est mis face au vent (mode angle au vent 0°) et reste bloqué pendant le temps de pénalité pour échouement défini pour la course. | ||
+ | |||
+ | Si le bateau reste face au vent trop longtemps après la fin de la pénalité ou s'il se place face au vent (pour attendre des réels par exemple) le moteur disqualifiera le joueur automatiquement. | ||
− | + | La période d'inactivité de VLM est actuellement de : 72h. | |
− | |||
− | |||
− | |||
− | + | Détails : | |
− | + | *la période compte à partir de la dernière action utilisateur (cf code dans checkuseractions.php), donc en cas d'échouement c'est l'heure d'échouement et non pas l'heure de libération qui est prise en compte pour la durée d'inactivité. | |
− | + | *Le moteur considère inactif un bateau dont l'angle au vent est < 1° | |
+ | = Généralités sur l'exécution = | ||
− | + | C'est exécuté sur le serveur qui gère la base de données et le moteur. Le traitement est lancé toutes les 5 minutes (ou toutes les minutes) en fonction de la course, et prend chaque bateau 1 par 1. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | C'est | + | Mais pour toutes les mises à jour, il se passe 5 minutes (respectivement 1 minute) pour tout le monde entre 2 vacations. Afin de classer N bateaux arrivant dans la même vacation, le traitement d'enregistrement dans la table "races_results" calcule le timing précis de coupure de la ligne. (C'est la belle fonction doTheyCross qui renvoie le cas échéant les coordonnées où la ligne a été coupée, il est donc simple de ramener la distance entre la dernière position et ce point à un temps de parcours pour cette distance). La vitesse au moment de la coupure de la ligne est celle prise en compte pour ce calcul. |
− | |||
− | |||
− | + | = Coté interface = | |
− | |||
− | |||
− | |||
− | |||
− | + | Le vent affiché (dans VLM10 et VLM20 et entre le < et le > du régulateur) est évalué à chaque rafraîchissement de la page, ainsi que la vitesse prévisible (Speed et VMG dans VLM100 et entre le < et le > du pilote auto) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | Ce qu'on peut dire, c'est que le vent et la vitesse du bateau au moment de l'exécution du moteur sont quasiment ceux qu'on peut voir si on rafraîchit la page "Mon bateau" pile au moment où le moteur s'exécute pour un bateau donné. | |
− | |||
− | |||
− | |||
− | |||
− | + | [[Catégorie:Développement]] | |
− | + | [[Catégorie:VLM]] | |
− | |||
− |
Version actuelle datée du 15 février 2019 à 08:00
Remarques : Il est question ici de moteur. Il ne s'agit pas du moteur du bateau mais du programme ;-) Le terme de vacation signifie calcul.
Sommaire
- 1 Calcul des données météo
- 2 Déroulement du calcul
- 2.1 Application des ordres du pilototo
- 2.2 Évaluation du nouveau cap si nécessaire (pilote orthodromique, régulateur d'allure, VMG, ou VBVMG)
- 2.3 Évaluation de la vitesse du bateau en fonction de son TWA
- 2.4 Calcul de la distance parcourue depuis la dernière vacation
- 2.5 Ajout de ce "vecteur de déplacement" à la dernière position du bateau
- 2.6 Enregistrement de la nouvelle position
- 2.7 Échouement et Abandon en cas d'inactivité
- 3 Généralités sur l'exécution
- 4 Coté interface
Calcul des données météo
Cf. Météo
Déroulement du calcul
VLM calcule un ensemble de paramètres selon un ordre établi. L'ordre des opérations est le suivant :
Application des ordres du pilototo
Tous les ordres prévus dans l'intervalle de la vacation (plus précisément : les ordres antérieurs à l'heure du moment) sont exécutés (c'est donc le dernier qui a raison quand il y en a plusieurs).
Évaluation du nouveau cap si nécessaire (pilote orthodromique, régulateur d'allure, VMG, ou VBVMG)
obtention d'un TWA (True Wind Angle)
- Régulateur d'allure : le TWA est direct, c'est le paramètre du régulateur d'allure
- Cap : c'est la différence entre le cap et le vent
- Ortho : Vlm calcul un cap orthodromique vers le WP visé
- BVMG/VBMVG : le pilote calcule une allure à partir du WP visé qui devient le TWA
Évaluation de la vitesse du bateau en fonction de son TWA
Le vent pris en considération n'est pas celui qui était calculé (interpolation) au début de l'exécution du moteur, mais est bien calculé exactement à la seconde où l'on estime chaque bateau.
Calcul de la distance parcourue depuis la dernière vacation
Suivant les courses, dans la dernière minute ou dans les 5 dernières donc. Il s'agit de la situation normale. De manière générale, il s'agit de la distance parcourue à l'allure courante dans le différentiel de temps depuis le dernier calcul de vacation.
Ajout de ce "vecteur de déplacement" à la dernière position du bateau
Là, il y a plusieurs tests :
- le bateau coupe-t'il la ligne d'arrivée ?
- Si oui, il est sorti de la course et son classement est enregistré dans la table "classement définitif" (table "races_results")
- le bateau coupe-t'il un point de passage ? Si oui, mise à jour du prochain point de passage dans la table "users" (qui deviendra "boats" lorsqu'un "user" pourra (bientôt) gérer plusieurs bateaux.
- pour le cas précédent et son contraire, on cherche à savoir si le bateau coupe un trait de côte :
- recherche des deux points de trait de côte les plus proches, et s'ils appartiennent au même trait de côte (il faut tout de même pouvoir passer dans les goulets), on vérifie si le bateau a coupé le segment défini par ces deux points. =XX
- le segment de distance parcouru par le bateau depuis sa dernière position est découpé en 25 sous-segments, et le traitement (du point précédent) est effectué pour chacun des sous-segments.
Enregistrement de la nouvelle position
- Calcul des distances parcourues sur 1h, 3h, et 24h.
- Enregistrement de la position et surtout de la distance restant à parcourir jusqu'au prochain point de passage dans la table "classement temporaire" (table "races_ranking")(c'est celle qui est utilisée pour l'affichage des classements de bateaux en course).
- Au passage, cela explique pourquoi il y a des "sauts de 1 mille ou un peu plus" si l'on rafraîchit la page des classements PENDANT les mises à jour.
Échouement et Abandon en cas d'inactivité
Si le bateau s'échoue, il est remis en course à proximité de la cote afin de pouvoir repartir. Il est mis face au vent (mode angle au vent 0°) et reste bloqué pendant le temps de pénalité pour échouement défini pour la course.
Si le bateau reste face au vent trop longtemps après la fin de la pénalité ou s'il se place face au vent (pour attendre des réels par exemple) le moteur disqualifiera le joueur automatiquement.
La période d'inactivité de VLM est actuellement de : 72h.
Détails :
- la période compte à partir de la dernière action utilisateur (cf code dans checkuseractions.php), donc en cas d'échouement c'est l'heure d'échouement et non pas l'heure de libération qui est prise en compte pour la durée d'inactivité.
- Le moteur considère inactif un bateau dont l'angle au vent est < 1°
Généralités sur l'exécution
C'est exécuté sur le serveur qui gère la base de données et le moteur. Le traitement est lancé toutes les 5 minutes (ou toutes les minutes) en fonction de la course, et prend chaque bateau 1 par 1.
Mais pour toutes les mises à jour, il se passe 5 minutes (respectivement 1 minute) pour tout le monde entre 2 vacations. Afin de classer N bateaux arrivant dans la même vacation, le traitement d'enregistrement dans la table "races_results" calcule le timing précis de coupure de la ligne. (C'est la belle fonction doTheyCross qui renvoie le cas échéant les coordonnées où la ligne a été coupée, il est donc simple de ramener la distance entre la dernière position et ce point à un temps de parcours pour cette distance). La vitesse au moment de la coupure de la ligne est celle prise en compte pour ce calcul.
Coté interface
Le vent affiché (dans VLM10 et VLM20 et entre le < et le > du régulateur) est évalué à chaque rafraîchissement de la page, ainsi que la vitesse prévisible (Speed et VMG dans VLM100 et entre le < et le > du pilote auto)
Ce qu'on peut dire, c'est que le vent et la vitesse du bateau au moment de l'exécution du moteur sont quasiment ceux qu'on peut voir si on rafraîchit la page "Mon bateau" pile au moment où le moteur s'exécute pour un bateau donné.