fix: cadre toujours orange
This commit is contained in:
@@ -122,24 +122,14 @@ class ParallelismService {
|
||||
final double ny = gy / magnitude;
|
||||
final double nz = gz / magnitude;
|
||||
|
||||
// ── Mesure de l'écart par rapport à la VERTICALE (cible sur un mur) ──
|
||||
// Quand le téléphone est vertical face au mur, la gravité est portée par
|
||||
// l'axe -Y (ny ≈ -1) et l'axe Z est proche de 0 (nz ≈ 0).
|
||||
//
|
||||
// Pitch = bascule avant/arrière (le téléphone "se couche") → vient de nz.
|
||||
// Roll = penché à gauche/droite → vient de nx.
|
||||
// Pitch et Roll mesurent l'inclinaison autour de chaque axe.
|
||||
final double pitchDeg = math.asin(nz.clamp(-1.0, 1.0)) * (180.0 / math.pi);
|
||||
final double rollDeg = math.asin(nx.clamp(-1.0, 1.0)) * (180.0 / math.pi);
|
||||
|
||||
// Écart angulaire TOTAL par rapport à la verticale parfaite, calculé en 3D.
|
||||
// C'est l'angle entre l'axe -Y du téléphone et le vecteur gravité réel.
|
||||
// -> Vaut 0° quand l'écran est parfaitement parallèle au mur,
|
||||
// indépendamment d'une rotation autour de l'axe de visée.
|
||||
final double tiltAngle =
|
||||
math.acos((-ny).clamp(-1.0, 1.0)) * (180.0 / math.pi);
|
||||
|
||||
// On utilise l'écart 3D comme critère principal (plus permissif et stable).
|
||||
final double worstAngle = tiltAngle;
|
||||
// Le critère de couleur = le PIRE des deux angles affichés à l'écran.
|
||||
// Ainsi ce que voit l'utilisateur (Pitch / Roll) correspond exactement
|
||||
// à la décision vert/orange : à 2° d'écart, on est largement dans le vert.
|
||||
final double worstAngle = math.max(pitchDeg.abs(), rollDeg.abs());
|
||||
|
||||
// ── Hystérésis ──────────────────────────────────────────────────────────
|
||||
// Premier appel : on décide selon alignThreshold uniquement
|
||||
|
||||
Reference in New Issue
Block a user