IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6] [Graphisme] Tracer un cercle avec pset


Sujet :

VB 6 et antérieur

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    mars 2002
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 302
    Points : 169
    Points
    169
    Par défaut [VB6] [Graphisme] Tracer un cercle avec pset
    je dois tracer un cercle avec la methode pset mais je ne connait pas la formule mathematique qui me permet de le faire

  2. #2
    Membre du Club
    Inscrit en
    mai 2002
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 54
    Points : 64
    Points
    64
    Par défaut
    Salut,

    Il faut utiliser les fonctions Sinus et Cosinus avec un angle variable de 0 à 2PI, un rayon et un point central. Tu peux tester ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Const PI = 3.141593
     
    Private Sub Form_Click()
    Dim Angle As Single, X As Single, Y As Single
    Dim Rayon As Long, CentreX As Long, CentreY As Long
    Me.ScaleMode = vbPixels
    Rayon = 90
    CentreX = 150
    CentreY = 110
    Angle = 0
    Do While Angle < PI * 2
      X = (Cos(Angle) * Rayon) + CentreX
      Y = (Sin(Angle) * Rayon) + CentreY
      Me.PSet (X, Y), vbBlue
      'Changer d'angle
      Angle = Angle + 0.05
    Loop
    End Sub

    A+
    HCath

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    mars 2002
    Messages
    38 979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2002
    Messages : 38 979
    Points : 65 379
    Points
    65 379
    Billets dans le blog
    1
    Par défaut
    pour augmenter la précision tu peux aussi faire : PI = 4 * Atn(1)

    Tu peux aussi tricher un peu plutot que de faire point par point avec un pas de 0.05, faire deux points espacés et faire un line entre les deux...
    L'vantage de la seconde methode étant de pouvoir faire un fill...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

    réalisations :www.oxygen-translations.fr|www.saftair.fr| www.ouestisol.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
    Humour

  4. #4
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2002
    Messages : 431
    Points : 489
    Points
    489
    Par défaut
    D'ailleurs pour éviter de calculer trop de sinus tu peux faire aller la boucle de 0 à pi/4 et tracer les huit quadrants simultanément.

    C'est à dire en reprenant X et Y comme définis dans le post précédent :
    (X,Y) (-X,Y) (X,-Y) (-X,-Y) (Y,X) (-Y,X) (Y,-X) (-Y,-X)

    Aussi calcule la valeur d'incrément optimal pour l'angle (tel que le déplacement soit d'environ 1 pixel) : approximativement 1/(2*Rayon) si le rayon n'est pas trop petit.

    vic

  5. #5
    mat.M
    Invité(e)
    Par défaut
    Pour une rapidité MAX on peut aussi travailler avec une table précalculée de valeurs générée dans un fichier.
    Le problème est au cas où les paramêtres de tracé changent et puis c'est moins précis.
    C'est plutôt utilisé pour les jeux

  6. #6
    Membre du Club
    Inscrit en
    mai 2002
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : mai 2002
    Messages : 54
    Points : 64
    Points
    64
    Par défaut
    Salut,

    J'ai fait un test de rapidité basé sur 300 cercles.

    1 - avec la méthode Circle = moins d'un dixième de seconde
    2 - avec Pset = une seconde et trois dixième
    3 - avec Pset mais en ne calculant les Sin/Cos que sur un huitiéme de cercle = une seconde et deux dixièmes.

    Donc, avantage très net à la méthode Circle. On peut néanmoins trouver intérêt à utiliser Pset si l'on souhaite dessiner le cercle en pointillés.

    A+
    HCath

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. tracer un demi cercle avec GDI
    Par olibara dans le forum C#
    Réponses: 2
    Dernier message: 15/07/2012, 21h52
  2. Tracer des cercles avec Tkinter
    Par XSquallX dans le forum Général Python
    Réponses: 4
    Dernier message: 07/04/2010, 16h34
  3. [VB6] [Graphisme] Arc de cercle dans un picturebox
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 04/11/2002, 18h55
  4. [VB6][Graphisme] Zoom
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/10/2002, 18h30
  5. [VB6] Exploiter un doc PowerPoint avec VB
    Par Tranber dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 04/09/2002, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo