Représentation graphique en vb

sebast105 Messages postés 37 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 18 avril 2005 - 28 déc. 2004 à 17:01
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 - 14 févr. 2005 à 18:36
Bonjour tout le monde,

Apparement on peut représenter des points avec putp et des droites dans vb. Mais je n'ai pas très bien compris comment cela fonctionne.

J'aimerai faire la réprésentation d'une courbe avec abscisses et ordonnées graduées mais comment on fait pour se répérer car l'origine (0,0) des mes axes n'est pas le point 0 sur ma form.

Merci d'avance pour votre aide. :)

SEB

9 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
28 déc. 2004 à 18:35
    Dim x  As Single
    Dim y  As Single
    Dim x0 As Integer
    Dim y0 As Integer
    
    x0 = 0
    y0 = (Sin(x0 / 30)) * 100
    Picture1.ScaleMode = 3
    For x = 1 To Picture1.ScaleWidth
        y = Picture1.ScaleHeight / 2 - (Sin(x / 30)) * 100
        Picture1.Line (x0, y0)-(x, y), vbBlack        x0 x: y0 y
        Next


Daniel
0
sebast105 Messages postés 37 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 18 avril 2005
28 déc. 2004 à 19:13
Merci pour ta réponse je comprends tout sauf ces deux lignes du code, tu pourrai me les commenter stp:

y = Picture1.ScaleHeight / 2 - (Sin(x / 30)) * 100
Picture1.Line (x0, y0)-(x, y), vbBlack

Merci beaucoup

SEB
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
28 déc. 2004 à 19:34
comme le zéro se trouve en haut il faut faire une correction pour calculer l'ordonnée:

'ici l'axe des x est au milieu:
y = Picture1.ScaleHeight / 2 - ordonnée

'pour un axe des x en bas:
y = Picture1.ScaleHeight - ordonnée

ordonnée = (Sin(x / 30)) * 100
ça c'est la fonction que j'ai choisi pour exemple, pour que la courbe soit visible et occupe tout l'espace disponble, il faut prendre des unités adéquates, sin(x) était beaucoup trop petit.

Picture1.Line (x0, y0)-(x, y), vbBlack
j'ai fait une Ligne pour rejoindre le point calculé au point précédent, c'est pas très correcte, il faudrait lisser la courbe (il existe une Source qui fait cà dans Codes Sources) mais c'est déjà un peu plus joli qu'un simple Pset:
Picture1.Pset (x,y),vbBlack

Daniel
0
sebast105 Messages postés 37 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 18 avril 2005
29 déc. 2004 à 13:58
Merci beaucoup pour les commentaires. :)

Par contre Picture1.ScaleMode = 3 ça sert à quoi exactement ?

Sinon si je veux graduer mes axes x et y, quelle est la manière la plus simple à utiliser ?

SEB
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
29 déc. 2004 à 14:31
ça met l'unité en Pixels (vbPixels) et non pas en Twips (vbTwips) qui est l'unité d'origine.
par exemple si 1 Twips vaut 15 Pixels j'aurais bouclé 15 fois sur le même Pixel ce qui aurait été une perte de temps inutile.
l'unité Pixel est celle qui convient pour l'écran, 1 Pixel = 1 point de l'écran.

    Dim Lx    As Integer
    Dim Ly    As Integer
    Dim i     As Integer
    Dim axe_X As Integer
    Dim axe_Y As Integer
    
    Picture1.ScaleMode = 3
    Lx = Picture1.ScaleWidth - 1
    Ly = Picture1.ScaleHeight - 1
    
'   axe des X  (y = 50)
    axe_X = Ly - 100
    Picture1.Line (0, axe_X)-(Lx, axe_X), vbRed
'   axe des Y  (x = 50)
    axe_Y = 50
    Picture1.Line (axe_Y, 0)-(axe_Y, Ly), vbRed
   
'graduations axe des X (1 unité = 30 pixels)
    For i = axe_Y To 0 Step -30
        Picture1.Line (i, axe_X - 2)-(i, axe_X + 2), vbRed
        Next
    For i = axe_Y To Lx Step 30
        Picture1.Line (i, axe_X - 2)-(i, axe_X + 2), vbRed
        Next

'graduations axe des Y (1 unité = 50 pixels)
    For i = axe_X To 0 Step -50
        Picture1.Line (axe_Y - 2, i)-(axe_Y + 2, i), vbRed
        Next
    For i = axe_X To Ly Step 50
        Picture1.Line (axe_Y - 2, i)-(axe_Y + 2, i), vbRed
        Next


Daniel
0
sebast105 Messages postés 37 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 18 avril 2005
30 déc. 2004 à 05:51
Encore merci à toi, j'ai une dernière question plutot simple, comment ça fonctionne et quelle est l'utilité de:

Picture1.ScaleMode = 3
Picture1.ScaleWidth ( ===> c pas comme: Picture1.Width)

Merci d'avance.

SEB
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
30 déc. 2004 à 12:43
l'unité par défaut est le Twips.
la propriété ScaleMode n'existe que pour les containers (Forme, PictureBox, Frame, etc..) et modifie les mesures des controles qui sont à l'intérieur.
Ainsi les dimensions Width et Height de la Forme sera toujours en Twips, par contre les dimensions ScaleWidth et ScaleHeight dépendent de l'unité choisie.
la différence entre Width et ScaleWidth (qui sont pas forcément dans la même unité) dépendent du BorderStyle.
ScaleWidth et ScaleHeight représente la zone client c'est la partie utilisable, le reste c'est la bordure ou la barre du haut pour la Forme et n'est pas accessible.
Picture1.ScaleMode 3 et Picture1.ScaleMode vbPixels c'est la même chose.

les autres unités:
1 --> vbTwips
2 --> vbPoints
3 --> vbPixels
4 --> vbCharacters
5 --> vbInches
6 --> vbMillimeters
7 --> vbCentimeters

pour convertir les unités:
MsgBox "1 pixels = " & ScaleX(1, vbPixels, vbTwips) & " twips"

Daniel
0
sebast105 Messages postés 37 Date d'inscription mercredi 28 janvier 2004 Statut Membre Dernière intervention 18 avril 2005
14 févr. 2005 à 15:34
Sinon j'aurai voulu savoir si il est possible de mettre du texte à coté des axes gradués ? :)



Merci d'avance.

Cordiallement Sébastien
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
14 févr. 2005 à 18:36
il faut utiliser l'instruction Picture1.Print qui écrit à la position courante du curseur en coordonnées graphiques.
la position courante est 0,0 au départ et est modifiée par les instructions graphiques, aussi bien que par Print lui même.
exemples:

sans rien changer au programme précédent:
Dim g As Integer
g = 0
For i = axe_Y To Lx Step 30
Picture1.Line (i, axe_X - 2)-(i, axe_X + 2), vbRed
Picture1.Print g
g = g + 1
Next

en modifiant légèrement la position:
For i = axe_Y To Lx Step 30
Picture1.Line (i, axe_X - 2)-(i, axe_X + 2), vbRed
If g < 10 Then
Picture1.CurrentX = i - 6
Else
Picture1.CurrentX = i - 8
End If
Picture1.Print g
g = g + 1
Next

avec une autre couleur et une police plus petite:
Picture1.ForeColor = vbBlue
Picture1.FontName = "arial"
Picture1.FontSize = 6
For i = axe_Y To Lx Step 30
Picture1.Line (i, axe_X - 2)-(i, axe_X + 2), vbRed
If g < 10 Then
Picture1.CurrentX = i - 4
Else
Picture1.CurrentX = i - 6
End If
Picture1.Print g
g = g + 1
Next

Daniel
0
Rejoignez-nous