Deplacement d'une image

Résolu
Signaler
Messages postés
48
Date d'inscription
vendredi 4 novembre 2005
Statut
Membre
Dernière intervention
15 décembre 2008
-
Messages postés
48
Date d'inscription
vendredi 4 novembre 2005
Statut
Membre
Dernière intervention
15 décembre 2008
-
Bonjour, apres avoir fait pas mal de recherche sur notre amis google ainsi que sur ce forum , je me decide donc a poser cette question et a m'en remettre a votre savoir.
Voila mon probleme, je voudrais deplacer une image en lui faisant faire une rotation circulaire.
Probleme peut etre facile pour vous mais je ne m'en sort pas n'ayant pas un grand niveau en programmation je sollicite donc votre aide.

Voila merci de votre attention si vous avez une idee de comment je pourrai m'y prendre je vous en remerci

                                                                                                                                   a+

13 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
C'est pas compliqué. Niveau première/terminal je dirais. Cherche des cours de trigonométrie.

Tu peux par exemple te baser sur sinus et cosinus.

Une form, avec une TImage, un TTimer, un bouton.
Ne pas oublier d'ajouter teta comme membre privé de la Form :

type
  TForm1 = class(TForm)
    ...
  private
    teta: Single;
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

Tu peux changer l'initialisation de teta pour modifier l'angle de départ.
En Delphi le 0, 0 est en haut à gauche.
Tu peux faire varier deltaTeta et timerInterval pour modifier la vitesse de déplacement.
Radius, c'est le rayon.

Et surtout, nomme tes composants !

<hr size="2" width="100%" />unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Image1: TImage;
    BitBtn1: TBitBtn;
    Timer1: TTimer;
    procedure BitBtn1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    teta: Single;
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

const
  centerLeft: Integer = 400;
  centerTop: Integer = 200;
  radius: Integer = 50;
  deltaTeta: Single = 0.05;
  timerInterval: Integer = 10;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  DoubleBuffered:= True;
  teta:= 0;
  Timer1.Interval:= timerInterval;
  Timer1.Enabled:= True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  teta:= teta + deltaTeta;
  image1.Left:= Round(centerLeft + radius * cos(teta));
  image1.Top:= Round(centerTop + radius * sin(teta));
end;

end.
Messages postés
48
Date d'inscription
vendredi 4 novembre 2005
Statut
Membre
Dernière intervention
15 décembre 2008

Desoler trop presser d'envoyer mon message je me suis tromper, je voulai dire translation circulaire a l'aide d'un timer

   excuser moi pour cette erreur, et je vous remerci d'avance pour vos reponse

                                                                                                                                           a+
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
bonjour,
tu trouveras sur le site de nombreux exemples de rotation d'image (centre et alpha)
qu'il suffit de paramétrer pour le centre et donc avoir une translation circulaire.


On verra après pour le timer..

cantador
Messages postés
48
Date d'inscription
vendredi 4 novembre 2005
Statut
Membre
Dernière intervention
15 décembre 2008

Bonjour cantador merci de t'inresser a mon probleme, je me suis peu etre mal exprimer je en faite deplacer le composant timage en faisant une translation circulaire, je ne veut pas modifier l'image mais bien la position du Timage, parce en effet pour la modification d'image le site a pass mal d'exemple

merci de prendre du temps pour moi a+
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
Je n'envisageai pas non plus une modif de l'image..mais bien de son conteneur..
mais cela revient au même..
si le conteneur se déplace selon un arc, l'image contenue dedans fera le même mouvement.
ou alors, c'est moi qui ai mal interprété et dans ton cas
tu aurais en supposant un conteneur plus grand que l'image et tu ne déplacerai que celui-ci, l'image elle restant fixe.

quelle est la bonne fprmule ?

cantador
Messages postés
48
Date d'inscription
vendredi 4 novembre 2005
Statut
Membre
Dernière intervention
15 décembre 2008

Bonjour cantador, c'est la premiere formule qui est la bonne c'est bien le composant qui doit bouger  donc l'image contenu suivre naturelement le mouvement je vais donc chercher sur le forum ce que tu me conceil mais sache que j'ai deja fait pas mal de recherche surement avec des mauvais mots cles
Merci d'accorder un peu de temps pour des debutant comme moi

                                                                                                                                                   a+
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
salut rt15..
je te rassure, c'était juste pour la partie rotation..
et il faut que le code reste abordable...

cantador
Messages postés
48
Date d'inscription
vendredi 4 novembre 2005
Statut
Membre
Dernière intervention
15 décembre 2008

Merci pour votre aide je vais etudier sa de près et regarder si c'est
bien le composant qui tourne et pas l'image merci a vous deux pour
votre aide je reviendrai plus tard pour vous donnez l'avancement de cette fonction qui me pose pas mal de probleme

Merci encore au expert d'accorder du temps au debutant qui galere pour des chose simple
                                                                                                                                        a+
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
C'est l'image qui tourne.

On ne peut pas faire tourner le composant.
Messages postés
48
Date d'inscription
vendredi 4 novembre 2005
Statut
Membre
Dernière intervention
15 décembre 2008

Bonjour je sais je ne veut pas faire tourner le composant en faite je veut lui faire suivre un trajectoire circulaire, en faite je veut que le composant se deplace en translation cirulaire (je crois que c'est comme sa que sa s'appelle)

merci de votre temps pour m'aider                                                                                       a+
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Aaaaaaaaah... Une translation circulaire ?

Donc pas de rotation. Et tu peux effectivement faire faire une translation à un composant.

Bin tu peux déjà essayer de taper sur les coordonnées de ton image (image1.Left, image1.Top...).

Ca risque de pas être fluide par contre. Donc tu risque de devoir trouver une autre solution, style image1.Canvas.CopyRect();, et éventuellement regardé du côté de TForm1.DoubleBuffered:= True;

Après, le reste, c'est des maths.
Messages postés
48
Date d'inscription
vendredi 4 novembre 2005
Statut
Membre
Dernière intervention
15 décembre 2008

Bonjour,merci de votre interet effectivement le probleme vient de la le reste c'est des maths et moi et les maths et je ne trouver pas la formule pour effectuer ce deplacement
j'ai faits pas mal de recherche ou on me donne des formules comme le calcule du perimettre etc mais je ne voit pas comment la mettre en oeuvre au niveau du code et c'est la dessus que je vous demande un coup de main

merci de votre attention pour mon probleme

                                                                                                                                                   a+
Messages postés
48
Date d'inscription
vendredi 4 novembre 2005
Statut
Membre
Dernière intervention
15 décembre 2008

Merci sa marche tres bien je t'assure je ne pense pas que j'aurai trouver tous seul encore merci

bonne journee                                                                                             a+