DS

δ = 31 m  ·  dα = 3.000000° sur l'angle entre amers  ·  empreinte f879e206b1049d1b

8 amers lus dans « DS.csv » (3 colonnes : x, y, azimut)
pas de feuille de mesures : les 28 angles seront deduits des azimuts, et le graphe sera complet.
2000 m12345678

Les amers
8 points, a 3044 a 6914 m de l'origine.

X (= X∩)
environ 1335 m de large — soit 5 fois moins que la portee des amers. Le cercle en pointille le situe ; le detail est ci-dessous.

Les traits pales vont de l'origine vers chaque amer. L'observateur n'est pas a l'origine : il est quelque part dans X (= X∩), et c'est tout ce qu'on sait de lui.

200 m

X = X∩
La clôture n'apporte rien : l'égalité est prouvée, et X n'a pas eu à être calculé.

Aire garantie
822200 ± 2300 m²

8 sommets certifiés.

le nuage de ToTal

3000 tirages ; 3000 tombent dans X∩ (100 %), 0 au dehors — ceux-là, les mesures les excluent.

Les sommets

#x (m)y (m)contraintes
1-224.745-299.831(1,8) ∩ (6,8)
2-429.458240.224(1,7) ∩ (1,8)
3-426.372301.162(1,6) ∩ (1,7)
4-270.495485.117(1,6) ∩ (8,6)
5380.314-849.611(6,1) ∩ (6,8)
6749.501-555.754(6,1) ∩ (8,1)
7314.502228.850(8,1) ∩ (8,4)
8282.596251.562(8,4) ∩ (8,6)

Chaque sommet est un enclos certifié ; la largeur du plus large vaut 1.1e-13 m.

Une méthode ponctuelle, jugée par X∩

ToTal — V. Pierlot et M. Van Droogenbroeck, A New Three Object Triangulation Algorithm for Mobile Robot Positioning, IEEE Transactions on Robotics 30(3):566-577, 2014 — rend un point, pas un ensemble. Il n'a pas de modèle d'erreur : on ne lui en fabrique pas un, on déforme les données dans les tolérances du calcul certifié (δ sur les amers, dα sur les angles, uniformément — le calcul certifié borne l'erreur, il ne la suppose pas centrée) et l'on regarde où la méthode place l'observateur.

règle pour n > 3pointsdans X∩dans Xpire violation
le triplet de plus grand |D| (le critère de fiabilité de l'article)30002406 — 80.2 %80.2 %177.8°
la plus petite ellipse d'incertitude (Madsen & Andersen 1998 — la règle publiée)30003000 — 100.0 %100.0 %
la moyenne pondérée par |D|30002771 — 92.4 %92.4 %8.3°
la médiane géométrique des triplets30002885 — 96.2 %96.2 %2.7°
les moindres carrés sur toutes les paires (y compris celles que la clôture déduit — ce que fait X)30003000 — 100.0 %100.0 %
les moindres carrés sur les seules paires visées (le maximum de vraisemblance)30003000 — 100.0 %100.0 %

Le pourcentage qui compte est celui de X∩, et c'est le test honnête : ToTal n'emploie que deux des trois angles d'un triplet — il impose la fermeture au lieu de la constater, et ne peut donc pas voir ce que la clôture de Floyd-Warshall ajoute. Le juger sur X seul lui reprocherait des contraintes qu'il n'a jamais lues. Sur azimuts absolus les deux colonnes coïncident ; elles ne se séparent que sur graphe lacunaire.

La « pire violation » est un angle, pas une distance : un point à 2° quand dα en vaut 3.000000° viole la tolérance angulaire des deux tiers. Le convertir en mètres demanderait une direction, et il n'y en a pas une seule.

Le tracé et cette table ne sont pas de même nature que le reste de la page. X et X∩ sont certifiés : toute position hors d'eux est prouvée impossible. Le nuage est un échantillon — 3000 tirages, bruit « azimuts » — et ne prouve rien sur la méthode : il la montre.

Ce que cela a coûté

lecture du tableur0.000 s
préparation du jeu0.005 s
calcul de X∩ et X0.221 s
aire et tracé0.444 s
nuage de ToTal0.447 s
total1.117 s

Le calcul et l'analyse sont deux choses : la première est l'objet de l'étude, la seconde un outil pour la regarder. Leur coût ne dépend pas des mêmes choses — le calcul du jeu, l'analyse de la précision demandée.

Sur quoi

machine : Linux aarch64  --  Raspberry Pi 4 Model B Rev 1.1
          4 coeur(s) a 1.50 GHz, 3.7 Go,  4 fil(s) demande(s)
calcul  : intervalles fi64, mantisse hors solveur 256 bits
bati    : Sep  7 2026, gcc 14.2.0
          arrondi dirige disponible,  socle : pthreads oui, rsgc non, flint non
          gmp 6.3.0, mpfr 4.2.2, mpfi 1.5.4
sources : empreinte 15d85f1c0be5

Les temps ci-dessus valent pour cette machine et pour elle seule. Ce qui se transporte d'une machine à l'autre, ce sont les rapports — pas les secondes.

Le jeu exact engendré (ce que lit le calcul)
# ==============================================================================
#  Jeu DS -- engendre par preparer.py, NE PAS EDITER A LA MAIN
#  8 amers, portees 3044-6914 m depuis l'origine
#  delta = 31 m (30 m de carte + 1 m d'arrondi des coordonnees)
#  d_alpha = 3.000000 deg SUR L'ANGLE ENTRE AMERS
#             dont 8.84e-04 arcsec de transcription, majores et absorbes
#  28 paires mesurees sur 28 possibles
# ==============================================================================

const NOM = "DS"
const EMPREINTE = "f879e206b1049d1b"     # signature des donnees, recopiee dans le resultat

const AMERS = Tuple{Rational{BigInt},Rational{BigInt}}[
    (-2286//1, 2277//1),          # 1  azimut  315.30 deg
    (-3175//1, 2432//1),          # 2  azimut  308.15 deg
    (-3030//1, 2055//1),          # 3  azimut  305.17 deg
    (-2728//1, 1698//1),          # 4  azimut  302.84 deg
    (-2950//1, 1620//1),          # 5  azimut  299.72 deg
    (-2744//1, 1318//1),          # 6  azimut  296.61 deg
    (-3727//1, 1606//1),          # 7  azimut  294.29 deg
    (-6558//1, 2189//1),          # 8  azimut  289.21 deg
]

const DELTA = Rational{BigInt}(31)
const T_D   = Rational{BigInt}(2027, 77408)   # tan(d_alpha/2)

const MESURES = Dict{Tuple{Int,Int},Tuple{Rational{BigInt},Int}}(
    (1,2) => (167//2673, 0),
    (1,3) => (2859//32257, 0),
    (1,4) => (10643//97495, 0),
    (1,5) => (6197//45298, 0),
    (1,6) => (2125//12913, 0),
    (1,7) => (7455//40204, 0),
    (1,8) => (6753//29146, 0),
    (2,3) => (517//19876, 0),
    (2,4) => (2990//64479, 0),
    (2,5) => (4682//63529, 0),
    (2,6) => (521//5156, 0),
    (2,7) => (6248//51405, 0),
    (2,8) => (12313//73817, 0),
    (3,4) => (1292//63533, 0),
    (3,5) => (4645//97592, 0),
    (3,6) => (757//10115, 0),
    (3,7) => (3102//32573, 0),
    (3,8) => (12298//87727, 0),
    (4,5) => (395//14504, 0),
    (4,6) => (1633//30007, 0),
    (4,7) => (7004//93697, 0),
    (4,8) => (11482//96077, 0),
    (5,6) => (485//17866, 0),
    (5,7) => (3013//63537, 0),
    (5,8) => (5067//55091, 0),
    (6,7) => (1142//56399, 0),
    (6,8) => (5983//92520, 0),
    (7,8) => (3649//82258, 0) )
Le journal du calcul
machine : Linux aarch64  --  Raspberry Pi 4 Model B Rev 1.1
          4 coeur(s) a 1.50 GHz, 3.7 Go,  4 fil(s) demande(s)
calcul  : intervalles fi64, mantisse hors solveur 256 bits
bati    : Sep  7 2026, gcc 14.2.0
          arrondi dirige disponible,  socle : pthreads oui, rsgc non, flint non
          gmp 6.3.0, mpfr 4.2.2, mpfi 1.5.4
========================================
  DS  (8 amers)
========================================
  8 amers, 56 contraintes orientees
  elagage sur 30 boites : 8 paires sur 1540
  X∩ : 8 sommets en 0.214 s  (elagage 0.040, solveur 0.143, filtres 0.022)
  boite de depart reprise de X∩ : x[-430, 750]  y[-850, 486]
  germe repris de X∩ : 8 contrainte(s)
  critere : la cloture n'apporte rien sur 56 bornes  ->  X = X∩ est ACQUIS sans calculer X
            --critere : calcul de X saute, le resultat est X∩
  resultat : X∩, 8 sommets
  memoire : pic 37.3 Mo
  temps : X∩ 0.214 s   X 0.000 s   aire 0.000 s   bord 0.000 s   calcul 0.217 s   mural 0.217 s
  solveur : direct=8 erreur=0 asymptote=0 non_gen=0 plusieurs=0 coords=0
  dont decomposition 0.10 s, solve_ratparam_real 0.04 s
  ecrit : /tmp/geoloc-1v5202w6/DS.resultat.json

========================================
  DS_courbes  (8 amers) -- analyse de /tmp/geoloc-1v5202w6/DS.resultat.json
========================================
  aire de X∩ : [819800, 824500] m2  (0.562 %, niveaux 2 ; 32 prouvee(s), 0 mesuree(s), 0 majoree(s))
  bord de X∩ : 64 points  (fleche 0.46 px a 2160, niveaux 3)
  temps :   aire 0.358 s   bord 0.082 s
  ecrit : /tmp/geoloc-1v5202w6/DS.analyse.json

← un autre tableur

Sommets certifiés par arithmétique exacte sur ℤ ; aire garantie — la flèche de chaque sous-arc est majorée, pas échantillonnée. Le tracé est la polyligne du calcul lui-même, point par point.