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

JavaScript Discussion :

[canvas] Déplacer un objet suivant une droite


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut [canvas] Déplacer un objet suivant une droite
    salut les pros

    j'ai un soucis bien sûr

    Je lance après chargement de la page html l'instruction setInterval qui démarre la fonction Ma_voiture().
    Et la fonction Ma_voiture() efface le CANVAS et dessine un sprite sur le canvas par le contexte ctx2.

    Le dessin se fait bien et maintenant traverse l'écran vers la gauche horizontalement, mais moi je voudrais qu'il suive une droite allant de sa position "milieu du bord haut" vers la position "milieu du bord gauche" et continue jusqu'à se cacher derrière l'écran vers la gauche.
    C'est la variable x1,y1 qui déplace le dessin vers la gauche grâce à x1-=2 puis y est calculé par la formule pour suivre la pente de la droite, sauf que cela ne marche pas, il va vers la gauche à l'horizontale.


    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
     
    var w=100;
    var h=50;
    var x1=380;
    var y1=75;
    var x2=-200;
    var y2=300;
    var B=y1-(pente * x1);
    var pente=(y2-y1)/(x2-x1);
    var x=-200;
    var y=0;
     
    function Ma_voiture(){
     
            // Efface le rectangle du dessin sur le canvas.
     
            ctx2.clearRect(x1,y1,w,h);
     
            // Dessine le dessin sur le Canvas, position x1,y1 avec largeur w et hauteur h.
     
    	ctx2.drawImage(vaiss1,x1,y1,w,h);
     
            // Change la position x1 vers la gauche.
     
    	x1+=-3;
     
            // Calcule y1 pour la nouvelle valeur de x1 afin de suivre la pente de la droite mathématique.
     
    	pente=(y2-y1)/(x2-x1);
    	B=y1-(pente * x1);
    	y=B+(x1 * pente);
    	y1=y;
     
    }
     
     
    // Appelle le dessin toutes les 16 milli-secondes.
     
    var	interval=setInterval(Ma_voiture,16);

    La formule de la droite est :

    y= (pente * x1) - B


    Selon un site de mathématiques (Allo...) le calcul de y se fait de cette façon :

    Quelle est l’équation de la droite ayant une pente de 3,5 et qui passe par le point (−6,−28) ?

    Étape 1 : On écrit l’équation de la droite en remplaçant m par 3,5.

    y=3,5x+b

    Étape 2 : À l’aide du point connu, on remplace :

    y par −28
    x par −6.
    y=3,5x + b
    −28=3,5(−6)+b

    Étape 3 : On isole le paramètre b :

    −28=3,5(−6)+b
    −28=−21+b
    −28+21=b
    −7=b

    Étape 4: On écrit l'équation sous sa forme fonctionnelle avec les paramètres :

    m=3,5

    b=−7.

    y=3,5x−7

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 605
    Par défaut
    d'où vient la variable "vaiss1" ?
    montrez nous un code de test complet en le mettant par exemple sur ce site :
    https://codesandbox.io/s/vanilla

  3. #3
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    C'est à ce niveau qu'il y a un problème...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      // Change la position x1 vers la gauche.
     
    	x1+=-3;
     
            // Calcule y1 pour la nouvelle valeur de x1 afin de suivre la pente de la droite mathématique.
     
    	pente=(y2-y1)/(x2-x1);
    	B=y1-(pente * x1);
    	y=B+(x1 * pente);
    	y1=y;
    Au départ, tu fais bien le job en calculant l'équation de ta droite avec pente et l'ordonnée à l'origine B au début de ton code mais ensuite tu redéfinis les coordonnées de ton premier point dont tu te sers comme variables...

    M(x1,y1) et N (x2,y2) avec leurs coordonnées sont les références permettant d'obtenir l'équation de la droite que tu veux suivre... après tu définis une variable x d'abscisse de position de ton sprite que tu incrémentes et tu fais calculer une variable y à partir de l'équation définie par pente et B... soit :

    soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x+=3;
    y=pente*x+B;
    En déclarant x et y, tu les définies initialement à respectivement x1 et y1.

    J'ai survolé ton code mais tu redéfinis à chaque fois l'abscisse de ton premier point de référence, tu recalcules la pente avec l'ordonnée de la position précédente...il y a un souci...

  4. #4
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Décembre 2021
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Décembre 2021
    Messages : 81
    Par défaut
    Ah c'est vrai mathieu, j'ai oublié de montrer la déclaration de la variable image, mais c'est pas elle le problème, elle n'est qu'une image du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var vaiss1=new Image();
    vaiss1.src="vaisseau.png";
    vaiss1.onload=function(){
      .....
    }

    Le problème vient de ma façon d'utiliser la formule car le dessin lui s'affiche bien.


    Merci beau coup Archimède, je galérais car je suis pas très fort en math même si j'aime bien.
    .

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/01/2015, 17h05
  2. [AJAX] Déplacer des objets HTML sur une page web
    Par brazilia28 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/06/2007, 12h47
  3. [MooTools] Déplacer un objet dans une case
    Par Sayrus dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 16/05/2007, 09h16
  4. déplacer un objet TLabel sur une Form
    Par darkangel37 dans le forum C++Builder
    Réponses: 14
    Dernier message: 14/06/2006, 10h36
  5. Changer les droits sur un objet via une requete
    Par gg72160 dans le forum Sécurité
    Réponses: 1
    Dernier message: 10/06/2006, 21h14

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