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 :

Afficher un point qui se déplace sur une trajectoire


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 36
    Points
    36
    Par défaut Afficher un point qui se déplace sur une trajectoire
    Bonjour,

    En VB6, je souhaite afficher le déplacement d'un point (cercle) sur une trajectoire constituée de segments (tableau de points) à une vitesse constante.
    Je sèche... la semaine a été rude et j'ai les neurones en choucroute...
    Par ailleurs mes recherches ont été vaines. Voudriez-vous me filer un coup de pouce pour me débloquer? Il serait très bienvenu.

    Voici quelques éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Type PointTrajectoire
        X As Single
        Y As Single
    End Type
     
    Public Type Trajectoire
       NbPoints As Long
       Point() As PointTrajectoire
    End Type
    Ma trajectoire est affichée dans une PictureBox avec AutoRedraw=true.
    Pour ne pas avoir à tout retracer à chaque fois, je passe en AutoRedraw=false pour travailler sur un autre plan, avec un timer de 50ms (20 images par seconde si j'ai bien calculé).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TimerTrajectoire_Timer()
       PictureTrajectoire.AutoRedraw=false
       PictureTrajectoire.Cls
       '...
       PictureTrajectoire.Circle(Xcercle, Ycercle),R
    End Sub
    Et c'est là que ça coince, j'ai du mal à trouver comment calculer la position du cercle à tracer (les points de suspension ci-dessus) ; sur un seul segment je pense que j'y arriverai, mais il faut gérer le passage d'un segment à un autre et donc la distance parcourue sur le segment précédent et le reliquat...

    Note : il est possible que ma façon de faire ne soit pas la bonne.

    Question subsidiaire : avec AutoRedraw, on a deux plans ; peut-on en avoir trois? (un pour mon fond, un pour ma trajectoire qui est modifiable, un pour mon point qui se déplace?).

    Bien cordialement,
    Renaud.

  2. #2
    Membre actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Points : 205
    Points
    205
    Par défaut
    Bonjour Renaud976.

    Les types sont faciles à employer, mais deviennent insuffisants dès que les choses se compliquent un peu. Ils faut passer aux classes. Si vous n'en avez jamais faites, le moment est venu de vous y mettre, et je suis prêt à vous aider en cette aventure, mais non à faire le travail à votre place.

    Si j'ai bien compris votre problème, il vous faut créer quatre classes,

    Point
    Points
    Segment
    Segments
    L'interface de la classe Point comprendra

    une propriété x As Single, qui renvoie ou définit l'abcisse du centre du point,
    une propriété y As Single, qui renvoie ou définit l'ordonnée du centre du point,
    une méthode Dessiner(Box As PictureBox) qui dessine le point sur le contrôle Box.
    La classe Points est une collection d'objets de classe Point. Son interface comprendra

    les quatre procédures classiques d'une collection
    une méthode Dessiner(Box As PictureBox, n As Long) qui dessine sur le contrôle Box les points de rang 1 à n.
    L'interface de la classe Segment comprendra

    une propriété Départ As Point, qui renvoie ou définit le point de départ du segment,
    une propriété Arrivée As Point, qui renvoie ou définit le point d'arrivée du segment,
    une méthode Dessiner(Box As PictureBox) qui dessine le segment sur le contrôle Box.
    La classe Segments est une collection d'objets de classe Segment. Son interface comprendra

    les quatre procédures classiques d'une collection
    une méthode Dessiner(Box As PictureBox, n As Long) qui dessine sur le contrôle Box les segments de rang 1 à n.
    À ce stade, vous aurez construit votre caisse à outils. Il ne vous restera plus qu'à jouer avec. N'hésitez pas à me faire savoir si vous être coincé,
    en me donnant évidemment la partie de code qui 'est en cause.

    Amicales salutations.

    PS. Réponse à la question subsidiaire : vous faut-il aussi les faveurs de la fermière ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    Bonjour Jean-Marie,

    Merci pour votre réponse. Le code clé en main ne m'intéresse pas outre mesure, il permet de débloquer une situation, et est à ce titre très tentant, mais il ne fait pas progresser.

    En l'état c'est essentiellement l'algo qui me bloque, ou tout du moins les grandes lignes de l'aglo que j'ai du mal à visualiser de façon complète.

    Concernant les classes, je suis de formation plutôt conception mécanique et je programme comme tel : parfois il me faut 20 lignes pour faire ce que les informaticiens évacuent en une ligne sans y penser, c'est un peu besogneux, mais ça a le mérite de me permettre de me relire et de comprendre mon soft même plusieurs mois après avoir mis le code de côté. Chacun fait avec ses moyens.
    Tout cela pour dire que les classes me font un peu peur en ce sens que je crains de devoir passer beaucoup de temps en apprentissage pour les maîtriser. Mais peut-être le jeu en vaut-il la chandelle? Je vais regarder plus en détail ce dont vous me parler et essayer de comprendre.

    Pour info, je suis le développeur du soft "Complexes" qui est téléchargeable sur le site 5xproject et qui sert à travailler des profils pour la découpe au fil chaud.


    L'algo dont j'ai besoin me servira à simuler le déplacement du fil.

    Pour la fermière, ça dépend de la fermière...

    Bien cordialement.

  4. #4
    Membre actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Points : 205
    Points
    205
    Par défaut
    Bonsoir Renaud976.

    C'est précisément la structuration par classes qui rendra évident l'algorithme. C'est dans la nature même de ce que l'on appelle la

    programmation orientée objet
    horrible anglicisme qui met en apposition en adjectif et un substantif. Je parle pour ma part de

    méthode objet
    car c'est avant tout une méthode qui dépasse la programmation. En ce qui concerne le temps d'apprentissage, je conçois votre crainte. La possibilité de créer des classes est apparue dans Vb4. Il m'a fallu trois mois pour la maîtriser, mais sans aucune aide que la documentation, qui est parfois bien absconse. J'estime qu'un mois est suffisant quand on est aidé. Je vous prépare un tutoriel pour la création et l'utilisation de la classe Point.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    Merci Jean-Marie,

    J'étudierai avec intérêt votre tutoriel. Je vais faire quelques recherches par ailleurs.
    Je ne dispose cependant pas de beaucoup de temps (je rénove notre maison et ça me prends tout mon temps) alors ne vous étonnez pas si je ne suis pas toujours très réactif.

    Bien cordialement,
    Renaud.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    Mon problème a été résolu de la façon suivante :
    - choix d'un "pas" correspondant à la distance séparant deux affichages du point sur la trajectoire,
    - création du tableau des points correspondants (on part du point 1, on ajoute la distance du pas sur la trajectoire, ça donne le point 2, on ajoute le pas sur la trajectoire, ça donne le point 3, etc.). Les distances sont calculées classiquement à l'aide du théorème de Pythagore.
    - choix d'un intervalle de Timer,
    - on lance le timer qui affiche les points à chaque intervalle (après un .cls, propriété Autoredraw à false).

    Je ne peux pas fournir directement les sources car la partie calculatoire des distances avec les joyeusetés de boucles et de conditions imbriquées (mon principal problème dans l'affaire) n'est pas de moi.

    Bien cordialement,
    Renaud.

    P.S.: Je suis toujours intéressé par les classes.

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

Discussions similaires

  1. comment faire une cible qui se déplace sur un écran
    Par Mordenkainen dans le forum LabVIEW
    Réponses: 0
    Dernier message: 15/04/2011, 12h01
  2. Appel à une fonction qui se trouve sur une autre page
    Par pierrot10 dans le forum Langage
    Réponses: 4
    Dernier message: 21/06/2007, 13h36
  3. Acceder a une TextBox qui se trouve sur une Autre Form
    Par le_contact dans le forum Windows Forms
    Réponses: 15
    Dernier message: 14/04/2007, 01h10
  4. Réponses: 7
    Dernier message: 23/03/2007, 11h41
  5. Afficher les données d'un champ sur une ligne
    Par white-angel dans le forum Access
    Réponses: 6
    Dernier message: 30/08/2006, 12h09

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