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

Langage Delphi Discussion :

Dessiner une spirale carrée


Sujet :

Langage Delphi

  1. #1
    Membre actif

    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2009
    Messages : 128
    Points : 203
    Points
    203
    Par défaut Dessiner une spirale carrée
    Bonjour à tous

    J'ai un projet de graphisme, mais je ne sais trop comment l'aborder du point de vue de l'algorithmique.

    Je m'explique : je voudrais dessiner sur un canvas des petits carrés de couleurs de 4x4 pixels par exemple qui s'empileraient à partir du centre en spirale carrée comme des briques collées les unes aux autres.

    Après avoir établi la procédure de dessin d'un petit carré DessinCarré(x,y,couleur : integer) avec x et y les coordonnées du coin haut gauche, quelle serait la relation mathématique pour définir la suite des x,y de chacun des petits carrés successifs ? Et avoir ainsi la position du nième petit carré :
    PositionCarre(n : integer; var : x,y : integer) ?

    J'ai conscience que je demande du difficile et je n'oblige quiconque à trop se casser les méninges... Merci d'avance à tous.

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut René,

    En principe tous le types de spirales sont des équations polaires du type Ro = f(Theta).

    Tu peux trouver ici plein d'équations, mais de siprales non carrées, je te passe le lien vers ce site car c'est une mine d'or qui pourra re-servir : http://www.mathcurve.com/courbes2d/s.../spirale.shtml

    mais pour ta spirale carrée on peut s'en inspirer pour mettre au point ton équation.

    Pour simplifier, on peut déjà considérer qu'il s'agit d'une spirale carrée formée de tronçons de droites horizontales (y=cste) et verticales (x=cste).
    Dès qu'on a dessiné sur un papier l'amorce de la spirale sur au moins un tour complet on peut se simplifier la vie en considérant que la suite de la spirale est formée de tronçons de droites homothétiques de ceux de l'amorce qui part du centre pour 3/4 d'entre eux le 4ième étant formé par le côté de longueur égale à Lg(TronçonHomothétiqueNmoinsUn)+Pas où Pas = valeur de la progression, qu'on peut prendre constant pour simplifier.

    Une autre solution pourrait consister à utiliser l'une des équations polaires du site pour calculer la position des points ou la spirale-courbe coupe le repère d'axes incliné à 45° sur l'horizontale puis de tracer des tronçons horizontaux et verticaux à partir des points d'intersection de la spirale-courbe.

    Cordialement, et à +.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Membre actif

    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2009
    Messages : 128
    Points : 203
    Points
    203
    Par défaut
    Bonjour Gilbert ! J'espère que tu te portes au mieux...

    Bin j'ai bien pensé que les points origines de chaque petits carrés doivent se trouver sur une spirale "normale" dont il suffit d'établir son équation... Je te remercie beaucoup pour le lien que tu me fournis .

    Comme tu vois, je suis toujours sur mes nombres premiers et je voudrais reproduire la spirale d'Ulam mais avec les expressions héxadécimales des valeurs de la fonction Pi(n). En attendant, Chapeau les GInt !

    Bien à toi et à plus...

  4. #4
    Membre actif

    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2009
    Messages : 128
    Points : 203
    Points
    203
    Par défaut problème résolu
    Si j'avais réfléchi avant de poster !

    comme il s'agit pour moi de dessiner des petits carrés de couleur en suivant une spirale carrée, le problème algorithmique est d'une simplicité enfantine ! Si on tourne dans le sens des aiguilles d'une montre, et si on considère qu'on avance selon quatre directions N S E O. Il suffit à chaque fois qu'un carré est dessiné de tester si le carré de la direction suivante est déjà coloré ou pas.
    => Si oui alors avancer d'un pas dans la même direction et colorier
    => Si non alors tourner à droite d'un pas et colorier

    ... et ainsi de suite...

    Comme on est en pixels d'écran donc en nombres entiers, des petits calculs de positions extrêment faciles.

    Je remercie tous ceux qui avaient commencé des hautes réflexions mathématiques pour me venir en aide; et avec mes excuses

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-salut René,

    "J'espère que tu te portes au mieux" : OK merci, et idem pour toi.

    "reproduire la spirale d'Ulam" : Vu la première image qu'en donne Wikipédia, celle dont la légende commence par "Première étape ..." on se rend compte que la spirale ne pourra âtre carrée que pour des petits nombres premiers car il faut de la place pour tracer la valeur numérique des nombres, à moins que ton objectif ne soit pas d'afficher la valeur numérique des nombres mais uniquement marquer la présence d'un nombre premier par un carré de pixels ???

    Si on se base sur cette image on voit :
    - que deux paires de tronçons successifs de droites ont la même longueur (Lg(1..2) = dx = Lg(2..3) = dy) et (Lg(3..5) = 2*dx = Lg(5..7) = 2*dy)
    - et que les deux tronçons suivants sont de longueur 3*dx et 3*dy on a donc affaire à une simple progression : y'a-plus-qu'à mettre ça en équation.

    "En attendant, Chapeau les GInt" : Yes, j'ai remarqué que ça télécharge sec, et personne se plaint.

    Cordialement et à +.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-salut René,

    Oups, t'as été plus rapide que moi.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #7
    Membre actif

    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2009
    Messages : 128
    Points : 203
    Points
    203
    Par défaut
    Merci beaucoup Gilbert... Ma forme n'est pas terrible en ce moment.

    Si j'aboutis à quelque chose sur mon idée de représentation binaire de répartition des premiers, je ne manquerai pas de t'en faire part personnellement.

    J'ai d'autre part suivi la piste des nombres premiers ayant le même nombre de bits 1 que de bit 0 (travaux récents des mathématiciens Christian Mauduit et Joël Rivat ), mais je ne suis parvenu à rien de bon

    Décevants finalement les premiers mais je m'accroche !

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-salut,

    Tiens voiçi un bout de code à modifier selon besoins.

    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
    procedure SpiraleCarree(var bmp : tBitMap; xc,yc : integer);
    const     UnPas = 10;
    var       i,x,y, m,nbPas : integer;
    begin     with Bmp.canvas do begin
                   x:=xc; y:=yc; pen.width:=2; MoveTo(x,y);
                   for i:=0 to 120 do begin
                       m:=i mod 4; nbPas:=(i div 2) + 1;
                       case m of
                            0 : // versDroite
                                begin x:=x + nbPas*UnPas; pen.color:=clBlue; lineTo(x,y);
                                end;
                            1 : // versHaut
                                begin y:=y - nbPas*UnPas; pen.color:=clLime; lineTo(x,y);
                                end;
                            2 : // versGauche
                                begin x:=x - nbPas*UnPas; pen.color:=clRed; lineTo(x,y);
                                end;
                            3 : // versBas
                                begin y:=y + nbPas*UnPas; pen.color:=clFuchsia; lineTo(x,y);
                                end;
                       end;
                   end;
              end;
    end;
    J'ai d'autre part suivi la piste des nombres premiers ayant le même nombre de bits 1 que de bit 0 (travaux récents des mathématiciens Christian Mauduit et Joël Rivat ), mais je ne suis parvenu à rien de bon
    ... J'ai vu la discussion ches Phidels.

    Cordialement, et à+.

    EDIT même jour 15h51 :
    Remplacé nbPas:=(i div 2) - 1;
    par nbPas:=(i div 2) + 1;
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  9. #9
    Membre actif

    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2009
    Messages : 128
    Points : 203
    Points
    203
    Par défaut
    Merci Gilbert, je garde ta solution que je range avec celle que Columbo m'a filée sur Phidels.com. Toutes deux sont des solutions mathématiques de bonne facture. Je testerai si besoin plus tard.

    Pour ma part, j'ai tricoté ma spirale carrée comme indiquée plus haut et le résultat sur le problème que je m'étais fixé est sur Phidels.Com en forum fondamental. Encore une déception sur les nombres premiers ?

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

Discussions similaires

  1. [Swing][Graphics2D] dessiner une flèche
    Par Galima dans le forum 2D
    Réponses: 13
    Dernier message: 03/12/2011, 23h31
  2. [Image]Dessiner une ligne en dynamique
    Par Bugmaster dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 02/08/2004, 11h56
  3. Dessiner une ligne
    Par Bugmaster dans le forum 2D
    Réponses: 6
    Dernier message: 29/07/2004, 08h36
  4. Dessiner une image en arrière plan d'1 MDI Main Frame
    Par Yacine95000 dans le forum MFC
    Réponses: 3
    Dernier message: 14/06/2004, 10h22
  5. Dessiner une ligne dans un cube transparent ?
    Par Muetdhiver dans le forum OpenGL
    Réponses: 4
    Dernier message: 04/05/2004, 11h06

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