Determination de la longueur d'une LINE

Signaler
Messages postés
18
Date d'inscription
jeudi 16 novembre 2006
Statut
Membre
Dernière intervention
24 novembre 2006
-
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
-
Bonjour,

J'ai un logiciel a modifié, ce logiciel programmé en VB  me permet de déterminer la giration en metre d un bateau (demi tour) j ai besoin d un outil qui permet de determiné le rayon du cercle (approximatif). j'ai déterminé un programme interressant qui me permet de tracer sur mon graphique une LINE à l'interieur de ma picturebox ce qui me manque c'est de déterminer la longueur de la LINE que je trace afinde pouvoir l afficher en temps reel ds un label...

voici mon programme, je l ai transferer ds mon soft il s applique tres bien, maintenant pour finaliser le projet il faut que je determine la longueur du trait que je trace :


Code :
   
Option Explicit
 
Private mDragEnCours                As Boolean
 
Private Sub Form_Load()
  mDragEnCours = False
End Sub
 
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  mDragEnCours = True
  With Line1
    .X1 = X
    .X2 = X
    .Y1 = Y
    .Y2 = Y
  End With
End Sub
 
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If mDragEnCours Then
    With Line1
      .X2 = X
      .Y2 = Y
    End With
  End If
End Sub
 
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  mDragEnCours = False
End Sub
 



ç rentabiliserait mon outil, je suis malheuresement un peu juste en connaissance de code ( j'etudie le etape par etape de Halvorson) mais ...il n y a pas la reponse à l interieur ;)


merci de votre aide...

11 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
SI tu as la chance d'avaoir l'une des dimention qui ne varie pas, la longueur de ta ligne est la différence des 2 points dans l'autre dimention.

Sinon, tu rattrape tes cours de math de 5éme (ou quelque chose comme ça) et tu applique le théorème de pythagore

Longueur² = (x2-x1)² + (y2-y1)²

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Autrement dit : Salut à Monieur Pythagore et :

Private Sub Command1_Click()
   MsgBox Sqr((Line1.X2 - Line1.X1) ^ 2 + (Line1.Y2 - Line1.Y1) ^ 2)
End Sub
Messages postés
18
Date d'inscription
jeudi 16 novembre 2006
Statut
Membre
Dernière intervention
24 novembre 2006

re

ça marche bien ds le programme que je vous ai presenté... cad que j ai bien une variation de la longueur ... mais le pb c que lors de l insertion ds mon soft ça ne fonctionne plus ....

ci joint le prog du soft complet sans le module1: c un peu long dsl il affiche tjrs 1275...

Private Mesure_Derive As Boolean, Cap_derive As String
Private Phase As Integer, Mem_Pointeur As Double


Private mDragEnCours As Boolean 'ajout


Dim Heur As String
Dim Minu As String
Dim sec As String




Sub debut()


  Call Init_Cercle 'initialise les cercle, ofset x et y et efface tableaux lat et lg
  Pointeur = 0
  long_drift = 0
  lat_drift = 0
  Lat(0) = Latitude
  Lg(0) = Longitude
  'imprimer_gir.Enabled = False 'Désactivation du menu imprimer
  Fin.Enabled = False 'Désactivation du menu quitter
  couleur = vbBlue
  Command4.Caption = "Exit Measurement"
  Command4.Visible = True 'Activation du bouton de fin
  imprimer_gir.Enabled = True
  Call trace_grille(Picture1) 'Traçage de la grille de repérage


End Sub


Private Sub Centre_gir_Click() 'Centrer le graph sur la giration


 Call centrer(Picture1, UpDown1)
 
End Sub


Private Sub Change_nom_Click() 'Changer le nom du bateau


 Frame2.Visible = True
 Text2.Visible = True
 Command2.Visible = True
 Text2.Text = nom_bateau
 Text2.SetFocus
 Command2.Default = True


End Sub


Private Sub Command1_Click()  'Démarer les mesures
 
 If Start = False Then 'mesure derive debut
  Mem_Pointeur = 0
  Label18 = ""
  Call debut  'Initialisation
  Start = True
  Phase = 1
  klg = Cos(Latitude * Coef)
  Call Debut_Derive
 End If
 If Phase = 2 Then 'debut giration
  Command1.Caption = "END Turning"
  couleur = vbBlack
  Call trace_grille(Picture1) 'Traçage de la grille de repérage
  Picture1.Circle Step(0, 0), 2
  Cercle(Pointe_Cercle) = 0
  Pointe_Cercle = Pointe_Cercle + 1
  Erase Lat 'Nettoyage de la variable Lat
  Erase Lg 'Nettoyage de la variable Lg
  Pointeur = 0
  Lat(0) = Latitude 'Affectation de la variable Lat de départ
  Lg(0) = Longitude 'Affectation de la variable Lg de départ
  Phase = 3
  Exit Sub
 End If
 If Phase = 3 Then 'fin giration
  Lat(Pointeur) = Latitude
  Lg(Pointeur) = Longitude
  Mem_Pointeur = Pointeur
  Picture1.Circle Step(0, 0), 2
  Cercle(Pointe_Cercle) = Mem_Pointeur
  couleur = vbBlue
  Command1.Caption = "START Measurement"
  Phase = 4
  Exit Sub
 End If
 If Phase = 4 Then 'mesure derive fin
  Phase = 5
  Call Debut_Derive
 End If
 Text1.SetFocus
 
End Sub


Private Sub Command2_Click() 'Validation du changement de nom du bateau


 If Text2.Visible = True Then
  nom_bateau = Text2.Text
  Text2.Visible = False
  Frame1.Caption = "Gyration Measurement " & nom_bateau
  Call enregistre_param
 End If
 Text1.SetFocus
 Frame2.Visible = False
 Command1.Default = True
 Call Retrace(Picture1) 'Retraçage du Graph
 
End Sub


Private Sub Command3_Click()


MsgBox Sqr((Line1.X2 - Line1.X1) ^ 2 + (Line1.Y2 - Line1.Y1) ^ 2)


End Sub


Private Sub Exit_sla_Click() 'Fermeture de la feuille de calcul de girations
 End
End Sub


Private Sub Command4_Click()


  MSComm1.PortOpen = False 'Fermeture de la feuille de calcul de girations
  Call Form_Load   'Initialisation
  Label23.Visible = False
  Timer1.Enabled = True
  Timer2.Enabled = True
  Command1.Visible = True
  Text1.SetFocus
 
End Sub


Private Sub Form_Load() 'Mise en place de la feuille au chargement




 mDragEnCours = False 'ajout
 Synchro = False
 Call charge_param
 Call Charge_Constantes(PR_GIRATION, Frame1, Picture1)
 Label1 = " Date: " & Date & " " 'Affichage de la date courante
 Frame1.Caption = "Gyration Measurement " & nom_bateau
 Frame2.Visible = True
 Command1.Caption = "START Measurement"
 Command1.Enabled = False 'Désactivation du bouton de démarrage
 Command4.Visible = False 'Désactivation du bouton de fin
 k = 1.852
 ofset_gr = Picture3.ScaleWidth / 3000
 Label12 = " Scale: " & 100 / echel & " Km " 'Affichage de l'echelle utilisée
 UpDown1.Value = echelle
 
'Initialisation des Timers
 Timer1.Interval = 100
 Timer2.Interval = 250
 
'Paramètrage du port comm
 MSComm1.CommPort = Num_Port
 MSComm1.Settings = "4800,n,8,1"
 MSComm1.PortOpen = True
 
 long_drift = 0
 lat_drift = 0
 Call Init_Cercle
 Call trace_grille(Picture1)
 Call Cmd_Direction_V_Click(0) 'Initialisation de la direction du vent
 Call Cmd_Direction_M_Click(0) 'Initialisation de la direction de la houle
 Picture1.Visible = True
 UpDown2.Value = 0
 Pointeur_Fin(0) = 0
 Start = False
 Phase = 0
 Label18 = ""
 Mesure_Derive = False
 Label22.BackColor = vbRed
 Label22 = " Serial not syncro "
 Flag_Graph = False
 
End Sub




Private Sub imprime_Click()


 'Impression des résultats
 
DoEvents
 
 Command1.Visible = False
 Label3.Visible = False
 Label4.Visible = False
 Label17.Visible = False
 Label22.Visible = False
 Label24.Visible = False
 Picture3.Visible = False
 Set Picture2.Picture = CaptureForm(Me)
 PrintPictureToFitPage Printer, Picture2.Picture
 Printer.EndDoc
Label3.Visible = True
 Label4.Visible = True
 Label22.Visible = True
 Label24.Visible = True
 Command1.Visible = True
 Label17.Visible = True
 Picture3.Visible = True
 Call Retrace(Picture1)




End Sub


Private Sub MSComm1_OnComm()
'Gestion des actions en fonction des évenements détectés sur le port série


Select Case MSComm1.CommEvent
    ' Traite chaque événement ou erreur en insérant du code sous chaque instruction Case


 ' Erreurs
 Case comEventBreak     ' Un signal d'arrêt a été reçu.
 Case comEventCDTO      ' Erreur de délai d'attente Détection de porteuse.
 Case comEventCTSTO     ' Erreur de délai d'attente Prêt à émettre.
 Case comEventDSRTO     ' Erreur de délai d'attente Modem prêt.
 Case comEventFrame     ' Erreur de dépassement du délai imparti
 Case comEventOverrun   ' Données perdues.
 Case comEventRxOver    ' Dépassement de la capacité du tampon de réception.
 Case comEventRxParity  ' Erreur de parité.
 Case comEventTxFull ' Tampon de transmission plein.
 Case comEventDCB    ' Erreur inattendue lors de l'extraction du bloc de contrôle de périphérique]


 'Événements
 Case comEvCD        ' Modification dans la ligne Détection de porteuse.
 Case comEvCTS       ' Modification dans la ligne Prêt à émettre.
 Case comEvDSR       ' Modification dans la ligne Modem prêt.
 Case comEvRing      ' Modification dans l'Indicateur d'appel.
 Case comEvReceive   ' Nombre de caractères indiqué par la propriété RThreshold reçus.
    Timer1.Enabled = False
    Timer1.Enabled = True
    Synchro = True ' Affichage de l'état du port
 
 Case comEvSend      ' Nombre de caractères indiqué par la propriété SThreshold dans le tampon de transmission.
 Case comEvEOF       ' Caractère de fin de fichier trouvé dans le flux en entrée
End Select


End Sub


 


Private Sub Sauve_Click()
'Chargement des données sauvegardées


 Synchro = False
'Fermeture du port comm
 If MSComm1.PortOpen = True Then
  MSComm1.PortOpen = False
 End If
 
  'Désactivation des Timer
 Timer1.Enabled = False
 Timer2.Enabled = False
 Nom_Fichier$ = Depart.ouvre_fichier(True, "*.GIR", "GIR")
 If Nom_Fichier$ <> "" Then
  Call Init_Cercle
  Command1.Visible = False
  Open Nom_Fichier$ For Input As #2
  Input #2, nom_bateau
  Frame1.Caption = "Gyration Measurement " & nom_bateau
  Label7.Visible = True
  Label8.Visible = True
  Label10.Visible = True
  Label11.Visible = True
  Input #2, A:  Label1 = A
  Line Input #2, A: Label2 = A
  Input #2, A: UpDown2.Value = A
  Input #2, A: Label6 = A
  Input #2, A: Label7 = A
  Input #2, A: Label8 = A
  Input #2, A: Label9 = A
  Input #2, A: Label10 = A
  Input #2, A: Label11 = A
  Input #2, A: Label15 = A
  Input #2, A: Label16 = A
  Input #2, A: Text1.Text = A
  Line Input #2, A: klg = CDbl(A)
  Input #2, ofset_x
  Input #2, ofset_y
  Input #2, long_drift
  Input #2, lat_drift
  Input #2, Pointeur
  Input #2, Pointe_Cercle
    For i% = 0 To Pointeur
   Line Input #2, A: Lat(i%) = CDbl(A)
   Line Input #2, A: Lg(i%) = CDbl(A)
  Next i%
 
  For i% = 0 To Pointe_Cercle - 1
   Input #2, Cercle(i%)
  Next i%
 
  Close #2
 End If
 Label23.Visible = True
 Command4.Caption = "End Replay"
 Command4.Visible = True
 Call Retrace(Picture1) 'Retraçage du Graph
 
End Sub


Private Sub Sauve_gir_Click()
'Sauvegarde des données


 Synchro = False
'Fermeture du port comm
 If MSComm1.PortOpen = True Then
  MSComm1.PortOpen = False
 End If
 
 Timer1.Enabled = False
 
 Nom_Fichier$ = Depart.ouvre_fichier(False, "*.GIR", "GIR")
 
 If Nom_Fichier$ <> "" Then
  flag_print = True
  Open Nom_Fichier$ For Output As #2
  Print #2, nom_bateau
  Print #2, Label1
  Print #2, Label2
  Print #2, UpDown2.Value
  Print #2, Label6
  Print #2, Label7
  Print #2, Label8
  Print #2, Label9
  Print #2, Label10
  Print #2, Label11
  Print #2, Label15
  Print #2, Label16
  Print #2, Text1.Text
  Print #2, klg
  Print #2, ofset_x
  Print #2, ofset_y
  Print #2, long_drift
  Print #2, lat_drift
  Print #2, Pointeur
  Print #2, Pointe_Cercle
 
  Print #2, Picture1
  Print #2, Picture2
  Print #2, Picture3
 
  For i% = 0 To Pointeur
   Print #2, Lat(i%)
   Print #2, Lg(i%)
  Next i%
  For i% = 0 To Pointe_Cercle '- 1
   Print #2, Cercle(i%)
   'Print #2, Cap_derive(i%)
  Next i%
  Close #2
 End If
 


'Réactivation du port comm et des timers
 MSComm1.PortOpen = True
 Timer1.Enabled = True
 Timer2.Enabled = True
 Call Retrace(Picture1)


End Sub


Private Sub Cmd_Direction_V_Click(Index As Integer)


'Sélection de la direction du vent


 Cmd_Direction_V(dir_vent).BackColor = &HFF&
 Cmd_Direction_V(Index).BackColor = &HFF00&
 Label6 = " Wind Direction: " & Cmd_Direction_V(Index).Tag
 dir_vent = Index
 If Index = 0 Then
  UpDown5.Visible = False
  Label7.Visible = False
  Label8.Visible = False
 Else
  UpDown5.Visible = True
  Label7.Visible = True
  Label8.Visible = True
  Call UpDown5_Change 'Affectation des changements
 End If


End Sub


Private Sub Cmd_Direction_M_Click(Index As Integer)


'Sélection de la direction du courant


 Cmd_Direction_M(dir_mer).BackColor = &HFF&
 Cmd_Direction_M(Index).BackColor = &HFF00&
 Label9 = " Swell Direction: " & Cmd_Direction_M(Index).Tag
 dir_mer = Index
 If Index = 0 Then
  UpDown6.Visible = False
  Label10.Visible = False
  Label11.Visible = False
 Else
  UpDown6.Visible = True
  Label10.Visible = True
  Label11.Visible = True
  Call UpDown6_Change 'Affectation des changements
 End If


End Sub


Private Sub Timer1_Timer()
'Récupération des données


 Dim Moy_Passe As Single, Moy_Speed As Single
 If Synchro = True Then
  If Start = True And Phase < 6 Then
   Pointeur = Pointeur + 1
  End If
  NMEA = MSComm1.Input 'Récupération des données
  Call lecture_donnees 'Lecture des données
  If flag_err = True Then 'Affichage état du port
   Label22.BackColor = vbGreen
   Label22 = "Input port: " & Num_Port
   Command1.Enabled = True
  Else
   Label22.BackColor = vbRed
   Label22 = " Serial not syncro "
   Command1.Enabled = False
  End If
  Label3 = " Heading: " & Capgyro & " ° "
  Label4 = " Inst. Speed: " & Speed & " Kts "  If Phase 0 Or Phase 4 Or Phase = 6 Then 'pas de mesure mais cherche le cap
   Call cherche_cap
  Else
   If Phase < 6 Then
    Call charge_valeurs ' mesure en cours
   End If
  End If
 End If
 Synchro = False


End Sub
Sub Debut_Derive()


 Duree_Start = 0
 Mem_Timer_Deb = Timer If Cap_derive "E" Or Cap_derive "O" Then
  p_deriv_0 = Pointeur
 Else
  p_deriv_2 = Pointeur
 End If
 Texte = " Drift Measurement: To Steer " & Texte & " "
 Label17 = Texte
 Command1.Visible = False
   
End Sub
Sub charge_valeurs()


'Chargement des valeurs pour tracer le Graph


   Lat(Pointeur) = Latitude
   Lg(Pointeur) = Longitude
   Call Trace_Graph(Picture1, UpDown1) 'Traçage du Graph
   XX = ofset_gr * Pointeur
   Picture3.Line (XX, 0)-(XX, Picture3.ScaleHeight), vbRed
   If Pointeur = 3000 Then
    R = MsgBox("Memory Plain", 16)
    'Check4.Value = 0
    Phase = 0
    Start = False
    Command1.Caption = "START Measurement"
    Command1.Visible = True
    Call Init_Cercle
    Pointeur = 0
   End If


End Sub
Sub cherche_cap()


   Cap_derive = "?"
   Select Case Capgyro
    Case 61 To 119
     Cap_derive = "E"
     Texte = "East"
    Case 151 To 209
     Cap_derive = "S"
     Texte = "South"
    Case 241 To 299
     Cap_derive = "O"
     Texte = "West"
    Case 0 To 29
     Cap_derive = "N"
     Texte = "Nort"
    Case 331 To 359
     Cap_derive = "N"
     Texte = "Nort"
   End Select
   If Cap_derive = "?" Then
    Command1.Visible = False
    Label17.BackColor = vbRed
    Label17 = " To Change Course "
   Else
    Command1.Visible = True
    Label17.BackColor = vbWhite
    Label17 = " Course is " & Texte & " "
   End If


End Sub
Private Sub Timer2_Timer()


 If Phase 1 Or Phase 5 Then
  Duree_Start = Int(Timer - Mem_Timer_Deb)
  Label17 = Texte & 10 - Duree_Start & " S"
  If Duree_Start >= 10 Then
   Call Calcul_Derive
   Command1.Visible = True
   Phase = Phase + 1
   If Phase = 6 Then
        Start = False
  End If
 End If
End If


'Actualisation de l'horloge
 If Time <> mem_heure Then
  mem_heure = Time
  Heur = Val(Left(Time, 2))
  Minu = Mid$(Time, 4, 2)
  sec = Right$(Time, 2)
  Label2 = Str$(Heur) + " H " + Minu + " m " + sec + " s " 'Affichage de l'heure
 End If


End Sub


Private Sub UpDown1_Change()
'Changement de la valeur de l'échelle du graph
 echelle = UpDown1.Value
 echel = echelle1(echelle)
 Label12 = " Scale: " & 100 / echel & " Km " 'Affichage de l'echelle
 Call enregistre_param      'Enregistrement des paramètres
 Call Retrace(Picture1)     'Retraçage du Graph à la nouvelle echelle


End Sub


Private Sub UpDown2_Change()
'Choix de l'angle donné à la barre
 Label15 = " Rudder " & UpDown2.Value & " "
 If UpDown2.Value = 0 Then
  Label16 = ""
 End If


End Sub


Private Sub UpDown3_Change()
'Côté de l'angle donné à la barre
 If UpDown3.Value = 0 Then
  Label16 = " RIGHT "
 Else
  Label16 = " LEFT "
 End If
 
End Sub


Private Sub UpDown5_Change()
'Changement de la force du vent
 Label8 = " " & UpDown5.Value


End Sub


Private Sub UpDown6_Change()
'Changement de la force de la houle
 Label11 = " " & UpDown6.Value


End Sub


Private Sub vent_mer_Click()
'Affichage de la partie permettant le changement de sens du vent et du courant
 If Frame2.Visible = False Then
  Frame2.Visible = True
  Command2.Visible = True
 End If
 
End Sub


Private Sub Calcul_Derive()


  Beep
  ofset_x = 0
  ofset_y = 0
  Label17 = Label15 & Label16  If Cap_derive "N" Or Cap_derive "S" Then 'mesure derive E/O
   p_deriv_3 = Pointeur
   long_drift = (Lg(p_deriv_3) - Lg(p_deriv_2)) / (p_deriv_3 - p_deriv_2)
   Label18 = Label18 + "Long Drift: " & Format(long_drift, "###0.00") & Chr(10)
  Else 'mesure derive N/S
   p_deriv_1 = Pointeur
   lat_drift = (Lat(p_deriv_1) - Lat(p_deriv_0)) / (p_deriv_1 - p_deriv_0)
   Label18 = Label18 + "Lat Drift: " & Format(lat_drift, "###0.00") & Chr(10)
  End If
 
  If Phase = 5 Then
   Command1.Caption = "START Measurement"
   Command1.Enabled = True
   Pointeur = Mem_Pointeur
   Call centrer(Picture1, UpDown1)
   imprimer_gir.Enabled = True
   Fin.Enabled = True
   Command4.Visible = False
  Else
   Command1.Caption = "START Turning"
  End If


End Sub


'ajout


Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  mDragEnCours = True
  With Line9
    .X1 = X
    .X2 = X
    .Y1 = Y
    .Y2 = Y
  End With
End Sub
 
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If mDragEnCours Then
    With Line9
      .X2 = X
      .Y2 = Y
    End With
  End If
End Sub
 
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  mDragEnCours = False
End Sub
 




 
Messages postés
18
Date d'inscription
jeudi 16 novembre 2006
Statut
Membre
Dernière intervention
24 novembre 2006

autant pour moi........................

j ai fait une erreur de debutant (que je suis d'ailleurs...)
Messages postés
18
Date d'inscription
jeudi 16 novembre 2006
Statut
Membre
Dernière intervention
24 novembre 2006

j'aurais besoin d'une petite aide complementaire svp...si possible...
j'ai inserer les infos ds mon soft... j ai modifier le fait d apparaitre ds une msgbox, le resultat apparait ds un label... une chose est cependant importante...
dans mon programme je peux modifier l echelle afin que le graphe s agrandisse ou pas de quelle maniere je peux intervenir pour que mon reslutat tienne compte de cette echelle?

merci
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
"dans mon programme je peux modifier l echelle afin que le graphe s agrandisse ou pas de quelle maniere je peux intervenir pour que mon reslutat tienne compte de cette echelle?"


C'est une blague ou quoi ?
Là ce n'est plus à M. Pythagore qu'on fait appel, mais à du beaucoup plus élémentaire, genre règle de 3 (niveau CE2), du genre "cela coute 20 euros lorsque la marge bénéficiaire du commerçant est de 15 %, combien cela coûterait-il s'il décidait de passer sa marge à 18 %"

On sort carrément des notions de développement informatique pour passer à des notions élémentaires d'arithmétiques !!!
Messages postés
18
Date d'inscription
jeudi 16 novembre 2006
Statut
Membre
Dernière intervention
24 novembre 2006

Le pb ne vient pas des maths pour moi ... mais de la programmation! malheureusement je suis néophyte en la matière...

scale .... tt ça ça n'est pas clair pour moi...


 


en fait avec votre programme ce sont des Twips sauf erreur de ma part, il faudrait que je fasse apparaitre un resultat different lorsque je change l'echelle de ma picturebox...

si  ct possible d etre mis sur la voie....

merci
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
effectivement, le dessin est en twips. Mais pour pouvoir dessiner ton cercle tu as dû te fixer une échelle.

Admettons (ce n'est qu'un exemple) que tu t'es fixé 100 twips = 1km, ça donne une échelle de 100, lorsque tu calcule la longeur de ta ligne, tu aura le résultat en twips. Il faudrait alors diviser par l'échelle pour avoir le résultat en km. Ainsi 600 twips te donneront 6km (600/100)

maintenant si tu fais un zoom x2 sur ton graphe, tu as désormais une échelle de 200 (ou 1/200 suivant comment on se fixe le rapport) soit 200 twips = 1 km ou si tu préfère 100 twips= 0.5km

Pour ta ligne, elle aussi va subir le zoom (il faudrait donc refaire le calcul) et désormais elle sera longue de 1200 twips.  Il faut toujours diviser par l'échelle, mais la nouvelle, donc  tu as 1200 twips, soit toujours 6km (1200/200)

Tu remarquera qu'ici, je n'ai pas eu besoin d'aborder des notions de programmation, ce n'est que du calcul et donc des maths
En gors je t'ai expliquer la fameuse Règle de 3

Niveau programation, ça revient à appliquer une multiplication, ou une division sur tes mesures, suivant le sens de convertion, et le mode de calcul de l'échelle.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
Messages postés
18
Date d'inscription
jeudi 16 novembre 2006
Statut
Membre
Dernière intervention
24 novembre 2006

Merci pour toute ces infos un élément important tt de meme c'est que lorque j agis sur le bouton qui me permet de modifié l echelle seul mon cercle "tracé" par le bateau change de taillle ... pas la feuille (picturebox) je ne sais pas si je suis clair?

est il possible de modifier l echelle de l ensemble des éléments cad cercle + feuille+ line? ( faire qq chose cohérent)
Messages postés
18
Date d'inscription
jeudi 16 novembre 2006
Statut
Membre
Dernière intervention
24 novembre 2006

Une derniere precision... je ne sais pas comment est definit mon cercle...cad a dire si la picturebox englobe le cercle et la feuille avec les carreau ou seulement la feuille avec les carreaux

merci
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Tu poses ici une question sous une certaine forme et... "aillieurs"... sous une forme différente, à savoir :

"Je poste ce message afin de savoir comment coder la taille d'une LINE, à l interieur d une picture box, en fonction de l echelle du programme...."
 
Je ne te comprends plus (ou alors trop bien... tu cherches ici et là... un peu ici , un peu là.. à faire faire tout à ta place...)

Le théorème de pythagore t'a été explique plus haut, à savoir :

longueur_ ligne² = coté1² + coté2²

Celà, c'était pour te permettre le calcul de la longueur...

Changer d'échelle, maintenant, revient à modifier les coordonnées des extrêmités d'une ligne, pas à calculer une nouvelle longueur pour connaître les nouveaux points extrêmes d'une ligne !

tu as dont tout simplement à appliquer ton "ratio" à X1,Y1,X2 et Y2
Quant à la nouvelle longueur en résultant, elle sera forcément elle même le résultat du "ratio" appliqué à l'ancienne (conformément aux règles les plus claires de l'homothétie...)

Il me semble à ce niveau qu'avant de continuer sur ce développement, tu devrais tout simplement résoudre ce problème à l'aide d'une feuille de papier, un crayon, une règle et un compas (ce dernier n'étant pas absolument indispensable)... Un pantographe, quoi !
De façon générale, le développement informatique est tout simplement la mise en syntaxe informatique du mécanisme de ta pensée (ici : l'homothétie la plus élémentaire).
Nous t'aiderons bien volontiers à mettre en syntaxe ce que tu aurais des difficultés à exprimer en VB, mais la partie géométrique pure (celle à traduire ensuite en syntaxe) doit rester LA TIENNE... et les connaissances qu'elle impose n'ont rien à voir avec VB.
Bon travail (principalement mathématique)