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

C# Discussion :

tracer les rayons d'un cercle


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut tracer les rayons d'un cercle
    Bonjour

    Je chipote un peu en essayant de tracer les rayons d'un demi cercle

    Je voudrais tracer les 18 rayons divisant un demi cercle en portions de 10°

    Ci apres le code utilisé et ci joint le resultat
    Ou est l'erreur ?

    Merci aux fort en geometrie, j'ai pas la tete ce soir ..


    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
          GR.DrawArc(Pens.Gray, R, -90, +180);
     
          double RadiusLen=R.Width / 2;
          Point P0 = new Point(0, R.Height / 2);
          double Pi36 = (Math.PI / 36f);
          double Pi2 = (Math.PI / 2f);
     
          for (i = 0; i < 19; i++)
          {
            double A = Pi2+(Pi36 * i);
            double Y = RadiusLen * Math.Cos(A);
            double X = RadiusLen * Math.Sin(A);
            PointF P1 = new PointF((float)X, (float)Y);
            GR.DrawLine(Pens.Gray, P0, P1);
          }
    Images attachées Images attachées  
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Bonsoir,

    J'ai utilisé une approche un peu différente, mais ça semble donner le résultat escompté à 2 détails près:
    1. le placement du cercle (mais ça c'est de ma faute j'ai pas pris le temps d'y réfléchir, j'ai utilisé lePanel.ClientRectangle pour aller vite)
    2. les rayons s'arrêtent à la bordure du cercle et c'est inhérent à la manière dont je le construis (donc problématique si ce n'est pas le but recherché)


    Voilà ce que j'obtiens:


    et le code associé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    const int startAngle = -90, endAngle = 90, step = 10;
    var r = panel1.ClientRectangle;
     
    using (var gr = panel1.CreateGraphics())
        for (int i = startAngle; i < endAngle; i += step)
            gr.DrawPie(Pens.Gray, r, i, step);
    Cordialement !
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Sensucht

    Oui effectivement ca m'énervait tellement que j'avais pensé au pie mais je trouvais pas ca tres "normal"

    Entretemps j'ai réussi

    J'avais trois erreurs !
    1- Ces foutues coordonées graphique a l'envers de ce qu'on a apris : je devais soustraire la valur du rayon de mon résultat Y

    2- Mon angle de départ doit etre 0

    3- Mon step doit etre de Pi/18 et non pas Pi/36 : Pi=180° et pas 360 !!!

    Voila le code complet

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
        private void DrawCanevas()
        {
          bmp = new Bitmap(pbPolar.Width, pbPolar.Height);
          GR = Graphics.FromImage(bmp);
          GR.SmoothingMode = SmoothingMode.AntiAlias;
     
          int w=bmp.Height/2;
          Point Pos=new Point(0,0);
          Size Sz=new Size(w,bmp.Height);
          Rectangle R1 = new Rectangle(Pos, new Size(bmp.Width,bmp.Height));
          R1.Inflate(-2, -2);
          Rectangle R = R1;
     
          R1.X -= w;
     
          int ww;
          if (pbPolar.Width < pbPolar.Height)
          {
            ww = (pbPolar.Width / 2) / 22;
          }
          else
          {
            ww = (pbPolar.Height / 2) / 12;
          }
          int i=0;
          for (i = 0; i < 12; i++)
          {
            GR.DrawArc(Pens.Gray, R1, -90, +180);
            R1.Inflate(-ww, -ww);
          }
     
     
          double RadiusLen = R.Height / 2;
          Point P0 = new Point(0, R.Height / 2);
          double Pi18 = (Math.PI / 18f);
     
          double A = 0;
     
          double X;
          double Y;
          PointF P1;
     
          for (i = 0; i < 19; i++)
          {
            Y = RadiusLen * Math.Cos(A);
            X = RadiusLen * Math.Sin(A);
            Y += R.Height / 2;
            P1 = new PointF((float)X, (float)Y);
            GR.DrawLine(Pens.Gray, P0, P1);
            A += Pi18;
          }
          pbPolar.Image = bmp;
        }
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    rebonjour olibara....

    L'erreur est dans le centre du cercle et un code plus clair c.à.d plus simple......
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
     
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing.Drawing2D;
     
    namespace WinFormsApplicationArc
    {
        public partial class Form4 : Form
        {
            public Form4()
            {
                InitializeComponent();
            }
     
            private void DrawRays(Graphics GR)
            {
     
                // Create a GraphicsPath object.
                GraphicsPath myPath = new GraphicsPath();
                Rectangle R = new Rectangle(50, 50, 200, 200);
     
     
                //rappel: nb de rayon 18 sur 180 degre(180 =>PI)  
     
     
     
                GR.DrawArc(Pens.Gray, R, -90, +180);
     
     
                double RadiusLen = R.Width / 2;
                PointF  CenterRect = new Point(R.X+R.Width/2, R.Y+R.Height / 2);
                double dx = Math.PI / 18f;
                double angle = 0.0;
     
                for (int i = 0; i < 19; i++)
                {
     
                    double X = CenterRect.X + RadiusLen * Math.Sin(angle);
                    double Y = CenterRect.Y + RadiusLen * Math.Cos(angle);
                    PointF vertex = new PointF((float)X, (float)Y);
                    GR.DrawLine(Pens.Gray, CenterRect, vertex);
                    angle =angle+ dx;
                }
     
     
            }
     
            private void Form4_Paint(object sender, PaintEventArgs e)
            {
                Graphics GR = e.Graphics;
                DrawRays(GR);
            }
     
        }
        // ton code
        //Point P0 = new Point(0, R.Height / 2);
        //double Pi36 = (Math.PI / 36f);
        //double Pi2 = (Math.PI / 2f);
     
        //for (i = 0; i < 19; i++)
        //{
        //    double A = Pi2 + (Pi36 * i);
        //    double Y = RadiusLen * Math.Cos(A);
        //    double X = RadiusLen * Math.Sin(A);
        //    PointF P1 = new PointF((float)X, (float)Y);
        //    GR.DrawLine(Pens.Gray, P0, P1);
    }
    bonne soiree.........

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/03/2013, 15h30
  2. Comment tracer les requêtes ?
    Par srappaille dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 26/01/2006, 18h57
  3. tracer les requêtes SQL
    Par izioto dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 13/10/2005, 16h35
  4. tracer les connexions web sur un serveur
    Par lutin511 dans le forum Développement
    Réponses: 2
    Dernier message: 28/06/2004, 23h36

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