banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 08 January 2007 22:29

Bruno
Membre du bureau
Lieu: Toulouse
Date d'inscription: 22 Jun 2005
Messages: 11951
Site web

Transformations affines et corrections d'Helmert

Bonjour,

N'étant pas topographe et mes cours de géométrie s'étant arrêté en terminale d'économie, je me pose des questions sur le sens des mots et expressions suivants: transformations affines et corrections d'Helmert.
D'après l'échange que j'ai suivi, l'IGN produit la BD Parcellaire en utilisant des transformations affines, tandis que la DGI applique les corrections d’Helmert pour produire le PCI.

Je n'ai rien trouvé sur Internet pour m'aider.

A votre bon coeur.

Amitiés,

Bruno

Hors ligne

 

#2 Mon 08 January 2007 23:25

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: Transformations affines et corrections d'Helmert

Bonjour,

Transfo affines utilisée par l'IGN ? Hum un petit doute il s'agit plutôt de triangulation de Delaunay . Ceci est à vérifier.

Pour la DGI (et c'est ce qui la différencie des prestataire privé) elle réalise une transformation dite en bloc  par modèle indépendant, voir l'échange sur ce forum "réception d'un plan photo au 1/2000" (en fin).
Cette transfo permet de calculer les paramètres d'une transformation d'helmert pour chaque feuille cadastrale d'une commune. Mais ceci en tenant compte de toutes les feuilles et de leur jonction (raccord entre feuille).

Deuxièmement toutes les deux, helmert et affine, sont des transformation, du plan sur lui même.

Une transformation affine ne conserve pas les propriété géométrique d'une figure (delaunay pareil), un carré peut devenir un rectangle, l'angle entre deux droite peut varier.
Une transfo affine classique est la déformation d'un plan lors du passage dans les antiques repro à l'amoniaque le plan est déformé perpendiculairement à l'axe du rouleau de la repro.

A l'inverse une adaptation d'helmert conserve les propriété géométrique d'une figure. Une notion qui est classiquement démontrée par le fait que la transformée du barycentre d'un nuage de point est le barycentre des points transformés.
Cette transfo est la composée d'une homothétie de centre O et de rapport k qui peut s'écrire (centre en 0.0)
X=k*x
Y=K*y
et d'une rotation d'angle téta (sens des angle: cercle topo)
X= cos(teta)*x + sin(teta)*y
Y =-sin(teta)*X + cos(teta)*y

et d'une translation de vecteur (p,q)
X= x+p
Y= Y +q

Si on pose a= k*cos(teta) et b= k*sin(teta) alors l'helmert peut s'écrire

X= ax + by +p
Y = -bx + ay + q

Toute la problématique en topographie est de trouver les paramètres a,b,p,q connaissant un nombre de point dans le système de départ et leurs coordonnées dans un système d'arrivée, local et lambert zone par exemple.
On démontre facilement qu'il suffit de deux points pour calculer a,b,p,q ceci c'est la théorie mathématique, mais dans la pratique en topographie le nombre de points connus dans les deux systèmes est supérieur à deux, et il n'existe pas H(a,b,p,q )tel que chaque point soit transformé en sa valeur connue dans le système final. Mais on peut trouver H(a,b,p,q) de manière à ce que chaque point transformé soit le plus proche possible de la valeur connue. Ceci s'appel la méthode des moindres carrés.

Soit v le résidu, la distance qui sépare la transformée du point de sa valeur connue (que l'on note Xm, Ym) 
pour chaque point connu on ecrit:

ax + by + p - Xm = vx
-bx + ay + q - Ym = vy

ou Vx, Vy sont la projection sur les axes du résidu v

Ceci peut être ecrit sous forme matricielle:

A*X- K = V avec

A :
ligne 1: x1 y1 1 0
ligne 2: y1 -x1  0 1
ligne n: xi  yi 1 0
ligne n+1: yi -xi  0 1
avec i = n/2

X matrice des inconnue (une colonne unique) : (a,b,p,q)

K matrice (une colonne unique): (x1m,y1m, ..... Xim,Yim)

V matrice (une colonne unique): (v1x,v1y .... vix,viy)

On cherche H(a,b,p,q) tel que le carré des résidu soit minimal (distance au carré minimale),  donc que la dérivée de la fonction représentant les résidu soit nulle.

Le carré des résidus s'écrit : transposée de V multiplié par V, (tV*V) ou encore :
Transposée de (AX-K) que multiplie (AX-K) reste à dériver cela et résoudre ce qui permet de calculer a,b,p,q.

Bonne aspirine 2007 Bruno

A+

Christophe

Dernière modification par DIANA2D.dev (Mon 08 January 2007 23:26)


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#3 Tue 09 January 2007 10:21

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: Transformations affines et corrections d'Helmert

Petit complément :

Une transformation affine ne conserve pas les propriété géométrique d'une figure (delaunay pareil), un carré peut devenir un rectangle, l'angle entre deux droite peut varier.


...mais elle conserve le parallélisme si je ne m'abuse ?

Hors ligne

 

#4 Tue 09 January 2007 11:09

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: Transformations affines et corrections d'Helmert

Bonjour

Une grosse erreur dans mon précédent post sur les "affines" voici la définition mathématique:

http://fr.wikipedia.org/wiki/Application_affine

Merci Robin. Effectivement le parralelisme est conservé donc l'angle entre deux droite ne devrait pas varier.

Christophe


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#5 Tue 09 January 2007 11:48

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: Transformations affines et corrections d'Helmert

Pas de soucis, c'est aussi un peu obscur pour moi.

Arrêtez moi si je me trompe, mais il me semble vaguement me rappeler qu'une transfo affine (comme on trouve dans Arcview 8+ par exemple) transforme un point X1 en un point X2 via des équations de ce type :

- Transformation simple de premier degré( = translation rotation homothétie)
X2 = aX1+b

Transformation de second degré, utilisé pour compenser des déformation de feuille globale
X2 = aX1²+bX1+c

Transformation de 3ème degré, pour des déformation plus locales :
X2 = aX1³+bX1²+cX³+d

Les autres sont peu utilisées.

C'est ça ?

Robin.

PS : j'ai trouvé d'autres trucs à lire pour les intéressés ici : http://www.cabri.net/abracadabri/GeoPla … ntact.html Suivre les liens ensuite pour d'autres pages.

EDIt : En fait ce n'est pas faux, les angles entres droites peuvent changer mais 2 droites parallèles le resteront : un rectangle en losange par exemple.

Dernière modification par Robin (Tue 09 January 2007 11:51)

Hors ligne

 

#6 Tue 09 January 2007 12:38

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: Transformations affines et corrections d'Helmert

Bonjour,

Une petite remarque, il est très difficile d'écrire des formules mathématiques dans un post, pour le HTML j'utilise Amaya, est-ce que les services techniques de GeoRezo auraient une solution pour permettre d'écrire ce genre de chose ??

A+

Christophe


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#7 Tue 09 January 2007 16:38

Plane Manuel
Participant occasionnel
Lieu: Lyon
Date d'inscription: 22 Feb 2006
Messages: 11

Re: Transformations affines et corrections d'Helmert

Bonjour,

Dans votre message, vous parlez de TRANSFORMATIONS affines et CORRECTIONS d’helmert.

Les mots TRANSFORMATIONS et CORRECTIONS qui sont utilisés semblent désigner la même chose, c'est-à-dire le passage d’un système à un autre (une Transformation ou une Correction, peu importe comment on l’appelle) en suivant une méthode mathématique particulière. Ici, les deux méthodes dont vous parlez sont couramment utilisées : Affine et Helmert.

En fonction du travail à réaliser et en fonction des outils à disposition, on peut utiliser l’une ou l’autre des méthodes tout en gardant à l’esprit les limites de chacune d’elles.

Aujourd’hui, la transformation d’Helmert est très utilisée car elle est relativement simple et implémentée dans la majorité des logiciels topo et SIG. Elle permet de faire coïncider au mieux des jeux de coordonnées planes à l’aide de 4 inconnues (2 translations, 1 rotation, 1 facteur d’échelle). Cette transformation permet de conserver les angles. Elle semble donc parfaitement adaptée pour la digitalisation de planches cadastrales.

La transformation Affine possède 6 inconnues, elle permet de couvrir des surfaces plus étendues et plus complexes que la transformation d’Helmert. Elle ne conserve pas les angles, les longueurs ne se déformant pas de la même manière suivant les directions. Elle est également  sensible à la répartition des points de calage.

En fonction de vos données et de vos besoins en terme de précision, il faut être capable de déterminer quelle transformation est la plus adaptée. Plus vous travaillez vers de grandes échelles, plus la précision (et donc le choix) de la transformation est important.

Le plus important à retenir concerne surtout les critères qui vont permettre de préférer une méthode plutôt qu’une autre. Plusieurs facteurs interviennent dans le choix d’une méthode :
- Sa précision
- Sa simplicité d’utilisation
- Ses limites d’applications et d’utilisation (nombre de points communs)

Cordialement

Manuel Plane

Hors ligne

 

#8 Tue 09 January 2007 16:53

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: Transformations affines et corrections d'Helmert

DIANA2D.dev a écrit:

Bonjour,
est-ce que les services techniques de GeoRezo auraient une solution pour permettre d'écrire ce genre de chose ??


Ca a l'air possible en PunBB, je fais passer la demande en interne. On va voir si on peut faire du LaTeX wink

Robin.

Dernière modification par Robin (Tue 09 January 2007 17:11)

Hors ligne

 

#9 Tue 09 January 2007 19:20

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: Transformations affines et corrections d'Helmert

Latex:

Voilà une idée qu'elle est bonne ! (ce sans rire)

En plus on se sentira protégés (là,je pouvais pas m'en empécher)

Christophe


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#10 Thu 11 January 2007 11:48

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: Transformations affines et corrections d'Helmert

Hello Christophe,

Pour le rajout de LaTeX sur le forum, c'est mis dans les "idées" mais ce n'est pas le plus urgent dans nos liste de développement, de plus il faut trouver une solution pour les abonnés par mail qui ne vont rien voir.
Il semble qu'il y ait des serveurs publics qui pourraient permettre de créer des formules. Libre à l'intéressé de joindre l'image de la formule a son message smile

Robin.

Hors ligne

 

#11 Thu 11 January 2007 20:31

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: Transformations affines et corrections d'Helmert

Salut,

J'ai regarder un peu plus précisement et il me semble que la pièce jointe, ou un lien vers une page HTML est la plus facile et économique des solutions.
Il faut aussi tenir compte du fait que le besoin n'est pas chronique.
Et il est donc beaucoup plus normal de laisser, ceux qui en ont besoin, se donner les moyens d'être lus.

Merci à l'équipe du GeoRezo d'être a l'écoute de ses utilisateurs.

A+

Christophe


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#12 Fri 12 January 2007 09:19

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: Transformations affines et corrections d'Helmert

Test : desolé pour les utilisateurs mail qui ne verront rien...

\left(\begin{array}{ccc}\sigma_i & 1 & 4\\0&-\sigma_i &2 \\0& 0& \sigma_i\end{array}\right)

\sum_{k=0}^n k = \frac{n(n+1)}{2}.

e^x=\lim_{n\to\infty} \left(1+\frac{x}{n}\right)^n

Hors ligne

 

#13 Tue 16 January 2007 09:35

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: Transformations affines et corrections d'Helmert

Bonjour,

Robin t'as utiliser quoi exactement pour générer ce message ?
(je galère avec Amaya et Mozilla qui plante lorsque je veux afficher un xml quand il est sur le serveur)

A+

Christophe


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#14 Tue 16 January 2007 10:09

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: Transformations affines et corrections d'Helmert

Hello,

Explication  : notre Fred préféré, dans un élan de générosité, a implanté le LaTeX sur GeoRezo, mais chut, ce n'est pas encore officiel wink

Il suffit d'utiliser les balises dont on parle ici :

http://www.math-linux.com/forum/viewtopic.php?id=1

Robin.

Hors ligne

 

#15 Tue 16 January 2007 10:13

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: Transformations affines et corrections d'Helmert

Pour faire vos tests, j'ai placé un sujet dans le bar : http://georezo.net/forum/viewtopic.php?id=46059

Hors ligne

 

#16 Tue 16 January 2007 10:43

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: Transformations affines et corrections d'Helmert

notre Fred préféré, dans un élan de générosité, a implanté le LaTeX sur GeoRezo


Rapide comme la Foudre ! Béni par nos soins (en remerciements).

A+

Christophe


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#17 Fri 19 January 2007 23:34

Bruno
Membre du bureau
Lieu: Toulouse
Date d'inscription: 22 Jun 2005
Messages: 11951
Site web

Re: Transformations affines et corrections d'Helmert

Bonsoir,

J'ai oublié de vous remercier, Manuel Plane, pour votre réponse très claire à mon sujet de départ.
Désolé Christophe, mais ta réponse était trop mathématique pour moi.

Merci,

Bruno

Hors ligne

 

#18 Fri 16 November 2007 20:18

gigilogi
Participant occasionnel
Date d'inscription: 16 Nov 2007
Messages: 14

Re: Transformations affines et corrections d'Helmert

salut Christophe V.
j' ai lu ton sujet sur la transformation d'helmert et la méthode des moindres carrés qui pour un néophyte comme moi est
une source de compréhension inestimable (je n' ai trouvé nulle part une explication aussi synthétique)
Mais n' étant pas un matheux dans l'âme je me pose plusieurs question:
ax + by + p - Xm = vx
-bx + ay + q - Ym = vy
Dans les 2 équations ci dessus est ce que x,y correspond au point qu'on veut transformer et est ce que Xm,Ym
correspond au point dans le système d'arrivée ?

Transposée de (AX-K) que multiplie (AX-K) reste à dériver cela et résoudre ce qui permet de calculer a,b,p,q.
quand on fait dérivée(t(AX-K)*(AX-K))=0 comment résoud on cette équation pour trouver a,b,p,q?
si tu as le temps de m'expliquer?
et peux tu me dire si j' ai bien compris ,une fois qu'on a a,b,p,q
il suffit d' appliquer à chaque point les formules:
X= ax + by +p
Y = -bx + ay + q
X,Y étant la transformé du point x,y du système d'origine dans le système d'arrivée.

merci d'avance.

Hors ligne

 

#19 Fri 16 November 2007 22:07

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: Transformations affines et corrections d'Helmert

Bonjour,

gigilogi a écrit:

ax + by + p - Xm = vx
-bx + ay + q - Ym = vy
Dans les 2 équations ci dessus est ce que x,y correspond au point qu'on veut transformer et est ce que Xm,Ym
correspond au point dans le système d'arrivée ?


Oui, Xm et Ym car en topographie il s'agit de point mesurés.


gigilogi a écrit:

Transposée de (AX-K) que multiplie (AX-K) reste à dériver cela et résoudre ce qui permet de calculer a,b,p,q.
quand on fait dérivée(t(AX-K)*(AX-K))=0 comment résoud on cette équation pour trouver a,b,p,q?


La somme des carrés des résidus

\sum_{i=0}^n V_i^2 =  ^t(AX-K) * (AX-K)

est minimale si la dérivée est  nulle.

La dérivée d'un produit est une somme on a donc

d^tX * ^t A(AX-K) + (^tX^tA-^tK) AdX = 0

\Longleftrightarrow

 ^t A(AX-K) = 0
et
(^tX^tA-^tK) A=0

donc (je simplifie)

\Longleftrightarrow

 ^tAAX-^tAK =0

\Longleftrightarrow

 ^tAAX=^tAK

\Longleftrightarrow

X=(^tAA)^{-1}(^tAK)


gigilogi a écrit:

et peux tu me dire si j' ai bien compris ,une fois qu'on a a,b,p,q
il suffit d' appliquer à chaque point les formules:
X= ax + by +p
Y = -bx + ay + q
X,Y étant la transformé du point x,y du système d'origine dans le système d'arrivée.


Oui

A+

Christophe


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#20 Sat 17 November 2007 09:35

gigilogi
Participant occasionnel
Date d'inscription: 16 Nov 2007
Messages: 14

Re: Transformations affines et corrections d'Helmert

merci christophe
grace à tes explications j'ai compris l'essentiel ce qui au départ paraissait difficile.
c' est vraiment sympa de ta part .
je travaille le sujet (il va me falloir un peu de temps) et je te demanderais peut être d'autres explications si
je coince.
merci encore.

Hors ligne

 

#21 Sat 17 November 2007 21:26

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: Transformations affines et corrections d'Helmert

Bonjour

Content que cela puisse servir (mais c'est le but d'un "rezo"), si tu as des questios n'hésites pas à les poser sur le forum.

Une petite indication sur la résolution des équations précédentes (car les matrices c'est bien mais pour résoudre faut mettre les mains dans le cambouis) :
La transformée du barycentre des points transformés est la transformée du barycentre des points à transformer. ceci conduit à quelques simplifications d'écriture.


A+

Christophe


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#22 Sat 17 November 2007 22:07

gigilogi
Participant occasionnel
Date d'inscription: 16 Nov 2007
Messages: 14

Re: Transformations affines et corrections d'Helmert

SALUT Christophe
je vais t'exposer le problème que je tentes de résoudre (pour l'instant je t'avoue que j'apprends les premières notions sur la transformation
d' helmert et que je ne suis donc pas au bout de mes peines):
(je fais ça en VB6 visual basic)
j' ouvre un fichier DXF dont j' extrais les points et  je positionne ces points sur un plan scanné (une pictureBOX).
ce que je veux obtenir -> en cliquant sur le plan scanné je prends différents points d' une parcelle et ce que je voudrais obtenir par la transformation d' Helmert c' est de repositionner correctement les points du fichier DXF par rapport aux points que j'ai cliquer successivement
sur le plan scanné.
je ne sais pas si je me fais bien comprendre ??
J' ai vite compris que pour résoudre la matrice que tu m'as gracieusement donné il fallait vraiment mettre les mains dans le cambouis.
à tel enseigne que pour l'instant j'ai toujours les mains propres.
Si tu peux m'éclairer de tes lumières cela me permettra peut être d'avancer un peu.

Hors ligne

 

#23 Sun 18 November 2007 00:18

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: Transformations affines et corrections d'Helmert

Bonjour,

(je fais ça en VB6 visual basic)


Déjà on parle le même langage de programmation.

je ne sais pas si je me fais bien comprendre ??


Si, je fais ça chaque fois que je veux appliquer un lever terrain sur le plan cadastral.

Ci-dessous un extrait de code VB6 qui permet de calculer une helmert .
repd contient les points dans les coordonnées du système à adapter
repa contient les coordonnées mesurées.

La sequence de fonction pour calcul une fois ces tableaux initialisés:

"Initialise les tableaux de points à partir de DXF"

matinit
transmat
multmat
triangmat
defparam
calculresidus
calculmoyquadra

"affichage des résultats"

Code:

Public repd() As Double
Public repa() As Double
Public maxpoint, nbpoint As Double
Public M1() As Double
Public M2() As Double
Public M3() As Double
Public M4() As Double
Public M5() As Double
Public residus() As Double
Public param(3) As Double
Public par As Double
Public moyennequadra As Double

Public Sub matinit()
'vérifie les données et initialise

maxpoint = UBound(repd) + 1
nbpoint = UBound(repa) + 1
If maxpoint <> nbpoint Then
i% = MsgBox("Calcul impossible, nombre de points différents dans chaque repère", vbOKOnly, "Désolé")
Exit Sub
Else
ReDim M1(2 * maxpoint - 1, 3) 'A
ReDim M2(2 * maxpoint - 1) 'K

For i% = 0 To maxpoint - 1

    
        M1(2 * i%, 0) = repd(i%, 0)
        M1(2 * i%, 1) = -repd(i%, 1)
        M1(2 * i%, 2) = 1
        M1(2 * i%, 3) = 0
        M2(2 * i%) = repa(i%, 0)
        M1(2 * i% + 1, 1) = repd(i%, 0)
        M1(2 * i% + 1, 0) = repd(i%, 1)
        M1(2 * i% + 1, 2) = 0
        M1(2 * i% + 1, 3) = 1
        M2(2 * i% + 1) = repa(i%, 1)
    
Next i%

End If
End Sub

Public Sub transmat()

ReDim M3(3, 2 * maxpoint - 1)
'calcul tA

For j% = 0 To 3

    For i% = 0 To 2 * maxpoint - 1
    M3(j%, i%) = M1(i%, j%)
    Next i%

Next j%

End Sub

Public Sub multmat()
ReDim M4(3, 3)
ReDim M5(3)

'calcul tAA
For i% = 0 To 3
    For j% = 0 To 3
    M4(i%, j%) = 0
        For k% = 0 To 2 * maxpoint - 1
        M4(i%, j%) = M4(i%, j%) + M3(i%, k%) * M1(k%, j%)
        Next k%
    Next j%
Next i%

'calcul de tAK
For i% = 0 To 3
M5(i%) = 0
    For j% = 0 To 2 * maxpoint - 1
    M5(i%) = M5(i%) + M3(i%, j%) * M2(j%)
    Next j%
Next i%

End Sub

Public Sub triangmat()

'triangularisation de tAAX=tAK soit M4X=M5
For j% = 0 To 2
        
            i% = j% + 1
            For k% = i% To 3
                
                    par = M4(k%, j%) / M4(i% - 1, j%)
                        
                        For l% = j% To 3
                        M4(k%, l%) = M4(k%, l%) - par * M4(i% - 1, l%)
                        Next l%
                        
                    M5(k%) = M5(k%) - par * M5(i% - 1)
               
                Next k%
       
Next j%
End Sub

Public Sub defparam()
param(3) = M5(3) / M4(3, 3)
For i% = 2 To 0 Step -1
par = 0
    For j% = i% + 1 To 3
    par = par + M4(i%, j%) * param(j%)
    Next j%
param(i%) = (M5(i%) - par) / M4(i%, i%)
Next i%
End Sub

Public Sub calculresidus()
ReDim residus(2 * maxpoint - 1)

For i% = 0 To 2 * maxpoint - 1
    residus(i%) = 0
    
    For j% = 0 To 3
    residus(i%) = residus(i%) + M1(i%, j%) * param(j%)
    Next j%
Next i%

For i% = 0 To maxpoint - 1
residus(i% * 2) = residus(2 * i%) - M2(i% * 2)
residus(2 * i% + 1) = residus(2 * i% + 1) - M2(2 * i% + 1)
Next i%

End Sub

Public Sub calculmoyquadra()
Dim w0, w1 As Double
w0 = 0
w1 = 0
For i% = 0 To maxpoint - 1
w0 = w0 + residus(2 * i%) * residus(2 * i%)
w1 = w1 + residus(2 * i% + 1) * residus(2 * i% + 1)
Next i%
w0 = w0 / maxpoint
w1 = w1 / maxpoint
moyennequadra = Sqr(wo + w1)
End Sub

Ceci dit cela ne te dispense pas, de comprendre comment ça marche, sourtout si tu veux améliorer car c'est livré "tel quel" et ça fait pas mal de temps que je me suis pas servi de ce code, je ne te le garantis donc pas.

A+

Christophe


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#24 Sun 18 November 2007 10:38

gigilogi
Participant occasionnel
Date d'inscription: 16 Nov 2007
Messages: 14

Re: Transformations affines et corrections d'Helmert

merci  christophe
je vais essayer de comprendre ton code.
je te tiens au courant

Hors ligne

 

#25 Sun 18 November 2007 11:04

gigilogi
Participant occasionnel
Date d'inscription: 16 Nov 2007
Messages: 14

Re: Transformations affines et corrections d'Helmert

Code:

Public Sub triangmat()

'triangularisation de tAAX=tAK soit M4X=M5
For j% = 0 To 2
        
            i% = j% + 1
            For k% = i% To 3
                
                    par = M4(k%, j%) / M4(i% - 1, j%)
                        
                        For l% = j% To 3
                        M4(k%, l%) = M4(k%, l%) - par * M4(i% - 1, l%)
                        Next l%
                        
                    M5(k%) = M5(k%) - par * M5(i% - 1)
               
                Next k%
       
Next j%
End Sub

AVANT D' arriver là ça va mais ici JE NE COMPRENDS PAS BIEN LE PRINCIPE.
Est Ce Que C'est bien param(i%)  la matrice X des inconnues recherchés (a,b,p,q) ?
si tu peux m'éclairer.
merci

Hors ligne

 

#26 Sun 18 November 2007 12:15

gigilogi
Participant occasionnel
Date d'inscription: 16 Nov 2007
Messages: 14

Re: Transformations affines et corrections d'Helmert

DANS le global , dis moi si je me trompes christophe .
repd contient les points dans les coordonnées du système à adapter(j'ouvre le fichier DXF et je charge les points dans repd-> on met en forme la matrice M1)
repa contient les coordonnées mesurées.(je clique les points sur le plan scanné (picturebox) que je mets dans repa-> on met en forme la matrice M2)
Aprés les différents calculs sur les matrices :
dans param(3) on obtient les 4 valeurs (a,b,p,q) de la transformation de helmert.
est ce que après le calcul : residus(i%) = residus(i%) + M1(i%, j%) * param(j%)
on retrouve les points transformés dans residus(i%)  ?
est ce qu'il suffit alors de positionner les points transformés de coordonnées  residus(i%)  sur le plan scanné
en affichant les textes des côtes des points du DXF Contenus dans  M1(i%, j%) ?

Hors ligne

 

#27 Sun 18 November 2007 20:36

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: Transformations affines et corrections d'Helmert

Bonjour,

'triangularisation de tAAX=tAK soit M4X=M5


Il s'agit de la résolution par la méthode du pivot de gauss, c'est pas terrible en terme de perf mais c'est facile à implanter.
Param() contient effectivement les 4 paramètres de la transfo d'helmert.

"Dans le global" c'est correct sauf à la fin, résidu contient la différence entre la valeur mesurée et la valeur de la transformée, c'est ce qui caractérise la transformation, on a calculer a,b,p,q pour que le carré de ceux-ci soit minimal.


A+

Christophe


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#28 Sun 18 November 2007 22:29

gigilogi
Participant occasionnel
Date d'inscription: 16 Nov 2007
Messages: 14

Re: Transformations affines et corrections d'Helmert

BONJOUR CHRISTOPHE
MERCI POUR TON EXPLICATION.
MAIS COMMENT ON REPOSITIONNE LES POINTS DU DXF PAR RAPPORT AUX POINTS Cliqués sur le plan du scan ?
PAR w0 et w1 ?

en attendant tes conseils avisés.
à +

Hors ligne

 

#29 Mon 19 November 2007 09:27

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3197
Site web

Re: Transformations affines et corrections d'Helmert

Bonjour,

Tu l'as écrit un peu plus haut

et peux tu me dire si j' ai bien compris ,une fois qu'on a a,b,p,q
il suffit d' appliquer à chaque point les formules:
X= ax + by +p
Y = -bx + ay + q
X,Y étant la transformé du point x,y du système d'origine dans le système d'arrivée.


A+

Christophe


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#30 Mon 19 November 2007 10:41

gigilogi
Participant occasionnel
Date d'inscription: 16 Nov 2007
Messages: 14

Re: Transformations affines et corrections d'Helmert

OK si j' ai bien compris il ne me reste plus qu'a faire cela :
sachant que pointx(i) et pointy(i) est l'image de repd.
IL SUFFIT d' afficher les nouveaux points pointtransformex(i%) et pointtransformey(i%) avec les textes des coordonnées de
pointx(i) et pointy(i)
for i%= 0 to  maxpoint -1 then
pointtransformex(i%)=param(0).pointx(i%)+param(1).pointy(i%)+param(2)
pointtransformey(i%)=-param(1).pointx(i%)+param(0).pointy(i%)+param(3)
end if

Hors ligne

 

Pied de page des forums

Powered by FluxBB