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 un cercle avec flib


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut Tracer un cercle avec flib
    Bonjour à tous,
    je suis étudiante en programmation.
    Je travaille avec la bibliothèque flib, pour ceux qui connaissent
    Alors voilà, on avait un exercice dans lequel il fallait tracer un carré. Jusque là rien de bien méchant, il suffit de créer une structure contenant les coordonnées X et Y du centre, puis les coordonnées de chaque angle du carré. Il ne reste plus ensuite qu'à écrire une fonction qui va faire passer un sprite traçant une ligne entre chacun de ces points et hop, on a le carré.
    Lors d'un cours où j'ai été absente, on a dû faire la même chose, mais avec un cercle cette fois.
    Alors, il ne s'agit pas vraiment d'un cercle, mais plutôt d'un nuage de points qu'on reliera entre eux, selon la quantité voulue, par exemple pour moi 10 points.
    Dans l'idée, il suffit juste de créer une autre structure contenant les coordonnées X et Y du centre du cercle, la taille du rayon et la position des 10 points.
    Pour faire ça, le prof nous a introduit les vecteurs 2D et les angles. Théoriquement, il faut que chaque point ait la même distance par rapport au centre, et le même angle par rapport aux autres segments (ici 10 points = écart de 36° entre chaque segment, qu'on convertit en radians).
    Le problème, c'est que je ne comprends pas du tout comment utiliser les vecteurs et les angles pour créer ce cercle.
    le problème n'est pas que je ne visualise pas ce qu'est un vecteur, j'ai été bon en math pendant tout le lycée, mais je ne vois pas comment les utiliser dans un code.

    Quelqu'un saurait m'aider à comprendre le mode de fonctionnement des vecteurs et des angles (même si c'est aps dans ma bibliothèque, j'imagine que flib n'a pas le monopole du vecteur)? L'examen approche, et je n'arrive pas à me sortir de ce pétrin seule, et autant dire que ça décourage.

    Merci de m'avoir lu

    EDIT: Ecrire le message m'a permis de comprendre une chose. Je peux maintenant tracer un cercle en paix, j'ai bien compris, il me suffit de créer un point partant du centre et ayant en X le cos de mon angle et en Y son sin. Et hop, normalement un point est créé. Non du coup le vecteur ça va être pour la rotation de mes carrés (et là, je bloque toujours sur "comment on utilise un vecteur dans son code)

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Je n'ai pas très bien saisi l'énoncé du problème. Pour définir un cercle tu as besoin d'un centre et d'un rayon, à quoi servent les autres points (même question pour le carré) ?

    Le résultat est une image matricielle / raster ? Si oui, il existe une solution classique. En tout cas tu es sur la bonne voie en utilisant un système de coordonnées polaire.

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 771
    Par défaut
    Je pense que tu peux oublier la notion de vecteur

    Et sinon pour un angle compris entre 0 et 90°, x=(rayon * cos(Angle) + x_orig) et y=(rayon * sin(Angle) + y_orig) (<- si je ne dis pas de bêtises )

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 837
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par yakoo Voir le message
    Alors voilà, on avait un exercice dans lequel il fallait tracer un carré. Jusque là rien de bien méchant, il suffit de créer une structure contenant les coordonnées X et Y du centre, puis les coordonnées de chaque angle du carré. Il ne reste plus ensuite qu'à écrire une fonction qui va faire passer un sprite traçant une ligne entre chacun de ces points et hop, on a le carré.
    Ben non. Une diagonale suffit (2 points au lieu de 5). Ou encore mieux: le (x,y) du point bas/gauche et le coté (3 valeurs au lieu de 4). C'est quand-même malheureux d'avoir un outil de calcul et ne pas lui faire justement calculer ce qui manque par rapport aux éléments qu'on possède.

    Citation Envoyé par yakoo Voir le message
    Dans l'idée, il suffit juste de créer une autre structure contenant les coordonnées X et Y du centre du cercle, la taille du rayon et la position des 10 points.
    Non. Le centre, le rayon et le nombre de points. Encore une fois c'est ton programme qui calculera les coordonnées des "n" points avec ces éléments.

    Citation Envoyé par yakoo Voir le message
    Ecrire le message m'a permis de comprendre une chose. Je peux maintenant tracer un cercle en paix, j'ai bien compris, il me suffit de créer un point partant du centre et ayant en X le cos de mon angle et en Y son sin. Et hop, normalement un point est créé.
    Ben oui, c'est la définition de "coordonnées polaires" (dans ce système, un point se définit par son angle et sa distance à l'origine).
    Donc tu as le centre "O" de ton repère et tu dois tracer "n" points à une distance de "d" du point O. Ben te suffit de partir sur une boucle de i allant de 0 à n. Ensuite tu calcules le sin et le cos de l'angle "i * 360 / n" et tu multiplies ces valeurs par "d" (merci Thalès) et t'as ton x et y par rapport à "O". Enfin comme tu dois les tracer autour de "C" (centre du cercle) et non "O" (centre du repère) une simple translation par rapport au vecteur "OC" et t'as le "x" et "y" de tous tes points autour de "C".

    Citation Envoyé par foetus Voir le message
    Et sinon pour un angle compris entre 0 et 90°, x=(rayon * cos(Angle) + x_orig) et y=(rayon * sin(Angle) + y_orig) (<- si je ne dis pas de bêtises )
    C'est aussi le cas même pour un angle compris entre 91 et 359
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 535
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 535
    Par défaut
    Citation Envoyé par yakoo Voir le message
    Le problème, c'est que je ne comprends pas du tout comment utiliser les vecteurs et les angles pour créer ce cercle.
    le problème n'est pas que je ne visualise pas ce qu'est un vecteur, j'ai été bon en math pendant tout le lycée, mais je ne vois pas comment les utiliser dans un code.
    ehhh la notion de vecteur s'illustre notamment pour le déplacement de points par exemple le vecteur vitesse en physique ou bien le vecteur symbolisant une force...
    un vecteur c'est un segment qui relie deux points mais qui est orienté..
    Il a pour caractéristique son module bref s'il représente une force l'intensité de la force ( en newtons ) et son argument c.a.d. l'angle décrit avec la normale du plan sur lequel le vecteur( force ) agit.
    dans un cercle les points sont fixes sauf si tu veux faire des transformations sur ce cercle...

    donc je partage l'avis de Foetus il a donné la bonne équation

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut
    J'avais déjà répondu à Matt_Houston, mais j'avais pas remarqué que ça n'avait pas marché (le site me déconnecte à chaque message, du coup il a pas posté mon message après reconnexion)

    Donc, je disais, en fait le but n'est pas de faire un cercle réel, mais une figure y ressemblant. Le but final est d'avoir des trucs assez aboutis en utilisant le moins de ressources possibles (d'où l'utilisation d'un seul sprite). Donc, la précision du cercle sera fonction du nombre de points donnés, il ne s'agit pas alors d'écrire un algorithme qui va me tracer un cercle, mais plutôt qui va me donner le nombre de points demandés autour d'un point (que mon sprite va ensuite relier par des lignes, ce qui donnera donc plus ou moins un cercle qui, si on zoome assez, n'en sera jamais vraiment un

    Oui, les points du cercle seront calculés automatiquement, mais selon une fonction que j'aurai faite (j'ai fait deux tableaux, un tableau des X et un tableau des Y comme cela:
    CX: Position X du centre
    CY: position Y du centre
    a = angle en rad

    tabX[i] = CX + rayon * cos(a)
    tabY[i] = CY - rayon * sin(a) (le signe "-" car l'axe des ordonnées est inversé)

    Il me suffit ensuite de dire à mon sprite d'aller en position tabX[i], tabY[i] et voilà.

    Pour les vecteurs, je pense qu'ils me serviront surtout à déterminer, en calculant leur longueur et en la comparant au rayon du cercle, si un point est dans mon cercle ou non.
    C'est très mal expliqué, je m'en excuse, mais je trouve toujours ça dur d'avoir à réécrire un message parce que le premier ne s'est pas posté.

    Sev@r: bah pour mon carré, en fait seule la position du centre me suffit, c'est avec celui-là que je détermine les sommets de mon carré. par contre dans ma structure je note chacun de ces points, je ne comprend pas comment tu veux tracer un carré en n'ayant que deux points (ceux de la diagonale)

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 837
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par yakoo Voir le message
    je ne comprend pas comment tu veux tracer un carré en n'ayant que deux points (ceux de la diagonale)
    Parce que le triangle formé par la diagonale et ses deux cotés est rectangle isocèle et qu'il ne peut donc y en avoir qu'un seul !!!

    Citation Envoyé par yakoo Voir le message
    bah pour mon carré, en fait seule la position du centre me suffit, c'est avec celui-là que je détermine les sommets de mon carré
    Ah ? sans avoir ni le coté ni un de ses points ? Je suis curieux de voir ça...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut
    En fait je lui fournis les paramètres, donc effectivement mon centre seul ne suffit pas

    Voilà, j'ai réussi à tracer le cercle, en fait je reviens toujours au même problème avec les vecteurs.
    J'aimerais rendre mes cercles dynamiques, théoriquement le vecteur devrait m'y aider puisqu'il est censé représenter un déplacement.
    Le problème encore une fois, c'est que je ne sais toujours pas comment les utiliser en code.
    Je sais très bien ce qu'est un vecteur, j'ai fait de la géométrie un bon moment mais je ne trouve toujours pas.
    Il faudrait que je puisse localiser un point (par exemple le centre de mon cercle) et lui appliquer le vecteur (pour créer une illusion de gravité par exemple)
    Mais comment? Aucune idée. Si quelqu'un saurait aider une âme en détresse

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 837
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par yakoo Voir le message
    Il faudrait que je puisse localiser un point (par exemple le centre de mon cercle) et lui appliquer le vecteur (pour créer une illusion de gravité par exemple)
    Un déplacement dans le plan c'est une translation. Si ton vecteur a pour coordonnées( Xv, Yv), alors tout point M(x, y) se déplacera et ses coordonnées deviendront M(X + Xv, Y + Yv). Et pour ton centre t'as pas à le localiser puisque tu le connais déjà.

    Donc si tu veux déplacer ton cercle, te suffit de l'effacer, puis déplacer son centre de 1 en X et en Y puis le réafficher. Et continuer jusqu'à ce que tu aies atteint ton vecteur...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/08/2015, 17h14
  2. tracer un demi cercle avec GDI
    Par olibara dans le forum C#
    Réponses: 2
    Dernier message: 15/07/2012, 20h52
  3. Tracer des cercles avec Tkinter
    Par XSquallX dans le forum Général Python
    Réponses: 4
    Dernier message: 07/04/2010, 15h34
  4. [FP]Tracer Une ligne avec Dev-pascal
    Par yffick dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 17/12/2003, 16h33
  5. [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

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