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.NET Discussion :

Cercles concentriques !


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 51
    Par défaut Cercles concentriques !
    Bonsoir à tous,

    Problème simple à priori mais je n'arrive pas à m'en sortir...
    Comment dessiner des cercles concentriques? (En le faisant via g.DrawEllipse(...) dans une picture box)

    Le "souci" c'est que le cercle est repéré par le point en haut à gauche du carré le contenant. J'ai essayé de faire ça à grands coups de Pythagore (avec les côtés du carré et le rayon) mais en vain :s

    Je sais que c'est faible mais je n'arrive pas à m'en sortir et ça m'ennerve et du coup je m'en sort encore moins et ça m'ennerve encore plus et...

    Bref merci d'avance à une âme charitable qui passerait par là

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Je ne fais pas dans le VB.Net donc il y aura peut être des coquilles (c'est de la faute du traducteur à ce moment ), mais le principe est là
    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
    Private Sub pictureBox1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs)
      Dim rayons As Integer() = {10, 20, 30, 40, 50}
      Dim g As Graphics = e.Graphics
      Dim pen As New Pen(Color.Red)
     
      For Each rayon As Integer In rayons
        g.DrawEllipse(pen, GetRectangle(rayon, pictureBox1.Bounds))
      Next
    End Sub
     
    Private Function GetRectangle(ByVal rayon As Integer, ByVal bounds As Rectangle) As Rectangle
      Dim rect As New Rectangle()
     
      rect.Width = 2 * rayon
      rect.Height = rect.Width
      rect.Location = New Point((bounds.Width - rect.Width) / 2, (bounds.Height - rect.Height) / 2)
     
      Return rect
    End Function
    Tu peux également passer par la méthode Inflate de la classe Rectangle (je viens juste de la découvrir ^^) qui modifie largeur/hauteur et modifie la position au passage également, ce qui conserve le centre du rectangle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub pictureBox1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs)
      Dim g As Graphics = e.Graphics
      Dim pen As New Pen(Color.Red)
      Dim rect As New Rectangle(Point.Empty, pictureBox1.Size)
      Dim i As Integer = 0
     
      While i < 10
        rect.Inflate(-5, -5)
        g.DrawEllipse(pen, rect)
        i++
      End While
    End Sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 51
    Par défaut
    Aaaah !! merci c'est super !

    J'ai utilisé la 2e méthode (avec le inflate, que je ne connaissais pas non plus) et ça fonctionne du tonnerre

    J'ai pas essayé la première méthode qui me semble un poil compliquée pour ce que je veux faire mais ça a l'air correct aussi !


    En tout cas MERCI !

    P.S : c'est quand même dingue de devoir faire des trucs comme ça pour faire un truc aussi simple que de dessiner des cercles concentriques ! ça aurait pas été plus logique de définir un cercle par son centre et son rayon messieurs de chez Microsoft nan ??

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par kronos85 Voir le message
    ça aurait pas été plus logique de définir un cercle par son centre et son rayon messieurs de chez Microsoft nan ??
    La méthode s'appelle DrawEllipse...

    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 51
    Par défaut
    Euh... ah bon ? o_O

    Bah vas-y essayes donc tiens ^_^

    Le DrawEllipse ne support que 4 surcharges de la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1.
    DrawEllipse(pen As Pen, x As Single, rect As RectangleF)
     
    2.
    DrawEllipse(pen As Pen, x As Single, y As Single, width As Single, height As Single)
     
    3.
    DrawEllipse(pen As Pen, x As Single, rect As Rectangle)
     
    4.
    DrawEllipse(pen As Pen, x As Integer, y As Integer, width As Integer, height As Integer)
    Tu auras compris que pour la 1 et la 3, ce sont des rectangles et qu'ils sont définis par le coin supérieur gauche.
    Ensuite pour la 2 et la 4, On a effectivement un point pour définir l'ellipse et une longueur et hauteur en guise de rayon (dans le cas où ils sont égaux pour un cercle). Seulement ce point n'est pas le centre mais le coin supérieur gauche du rectangle (ou carré) dans lequel se trouve inscrit(e) l'ellipse (ou cercle)

    Bref, essayes donc de dessiner des cercles concentriques comme ça tu verras bien

    (peut-être qu'il existe des différences entre les différents frameworks .net, mais je ne pense pas qu'ils s'amusent à redéfinir ainsi ce genre de méthodes !)

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Ce que je veux dire, c'est que tu ne peux pas espérer qu'une méthode DrawEllipse se comporte comme si toute les ellipses étaient des cercles.
    De plus en général, les éléments graphiques sont représentés par leur bounding box. Ceci explique le rectangle utilisé pour la définition d'une ellipse.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

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

Discussions similaires

  1. Analyse image cible fléchettes (cercles concentriques)
    Par predalpha dans le forum OpenCV
    Réponses: 8
    Dernier message: 02/11/2014, 01h33
  2. Lignes, cercles
    Par Francky033 dans le forum DirectX
    Réponses: 1
    Dernier message: 13/07/2003, 22h18
  3. [VB6] [Graphisme] Tracer un cercle avec pset
    Par bleuerouge dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/12/2002, 17h12
  4. [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, 17h55
  5. savoir si 1 point est a l'intérieur d'un cercle ...
    Par skarladevobsy dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 23/05/2002, 18h14

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