Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Problème de rotation  (Lu 3533 fois)

0 Membres et 2 Invités sur ce sujet

Diamond

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Problème de rotation
« le: Mars 05, 2015, 08:35:26 pm »
Bonjour tout le monde !
Mon problème est que je veux appliquer une rotation sur un CircleShape(jai créé un triangle isocèle), jusque la tout va bien mais lorsque j'effectue la rotation le centre de rotation est le point situé sur l'origine (0;0) alors que je voudrais effectuer la rotation a partir du sommet du triangle isocèle.
J'ai déjà essayé avec sf::setOrigin() mais sans succès ...

Merci de votre aide !  ::)

yhu420

  • Jr. Member
  • **
  • Messages: 75
    • Voir le profil
    • E-mail
Re : Problème de rotation
« Réponse #1 le: Mars 05, 2015, 08:48:55 pm »
Je ne pense pas pouvoir être très utile, mais pense peut-être à effectuer plusieurs tests, quant au point d'origine que tu donnes. Utilises-tu "setRotation" ou "rotate"?
Aussi, pourrait-on avoir un peu de code?
Merci

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Problème de rotation
« Réponse #2 le: Mars 05, 2015, 08:54:20 pm »
Je comprends pas, un triangle isocèle avec une CircleShape ?  ???
Et comment ça sans succès ? Les rotations effectuées avec rotate ou setRotation se font par rapport à l'origine, donc si tu la déplaces, tes rotations (et tes déplacements hein !) s'effectueront à partir de ce point.

kimci86

  • Full Member
  • ***
  • Messages: 128
    • Voir le profil
Re : Problème de rotation
« Réponse #3 le: Mars 05, 2015, 09:08:42 pm »
Bonsoir,

Si je comprends bien ton problème, tu veux faire tourner un objet autour d'un point donné.
En effet, tu peux t'en sortir avec setOrigin. Tu peux définir la position de l'objet au niveau du point de rotation et définir la position relative à ce point avec setOrigin.
Cependant, cela ne me semble pas être une solution très propre étant donné que l'origine et la position d'un objet ont une signification bien précise et il me semble impropre de les dénaturer de la sorte. En revanche on peut imaginer un objet auxiliaire servant à définir un point d'attache avec des transformations, autrement dit un repère local.
Concrètement, tu peux définir un classe Node qui est Drawable et Transformable et qui contient des objets fils.
Tu peux t'inspirer du tutoriel officiel.

Diamond

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Re : Problème de rotation
« Réponse #4 le: Mars 05, 2015, 09:13:34 pm »
Ah oui désolé je me suis trompé c'est un "ConvexShape" et non un "CircleShape" !
En fait le triangle isocèle représente un faisceau de lumière sortant d'une torche qui est censé bouger en fonction de la position de la souris j'ai donc utilisé une tangente(si vous avez une meilleure solution je suis preneur !)
Voila quelques bouts de codes (seuls ceux qui posent probleme):

//m_masque = triangle isocèle (representant un faisceau de lumiere d'une torche)
    m_masque.setPointCount(3);
    m_masque.setPoint(0, sf::Vector2f(8*ECHELLE_MAP, 32*ECHELLE_MAP));
    m_masque.setPoint(1, sf::Vector2f(0, 0));
    m_masque.setPoint(2, sf::Vector2f(16*ECHELLE_MAP, 0));
    m_masque.setOutlineColor(sf::Color(256,256,256,200));
    m_masque.setOutlineThickness(200);
    m_masque.setFillColor(sf::Color(256,256,256,50));

 //rotation de la torche
m_masque.setRotation( ( 180*atanf( (posSourisX-heros.getPosX()) / (heros.getPosY()-posSourisY) ) ) / PI );

 

ps: j'aimerai éviter de déplacer l'origine pour faciliter les calculs mais s'il n'y a pas le choix je ferais avec  :-\
« Modifié: Mars 05, 2015, 09:34:13 pm par Diamond »

kimci86

  • Full Member
  • ***
  • Messages: 128
    • Voir le profil
Re : Problème de rotation
« Réponse #5 le: Mars 05, 2015, 09:34:04 pm »
Effectivement, je n'avais pas bien compris ton problème.
Dans ce cas un setOrigin paraît adapté.
m_masque.setOrigin(m_mask.getPoint(0));

Tu peux aussi définir la position de tes points autrement pour avoir celui qui t'intéresse directement en (0,0).

kimci86

  • Full Member
  • ***
  • Messages: 128
    • Voir le profil
Re : Problème de rotation
« Réponse #6 le: Mars 05, 2015, 09:44:53 pm »
Autre remarque : tu utilises atanf pour calculer un angle. Déjà, c'est une fonction C, mais en plus atanf donne un angle modulo π. Tu veux probablement calculer un angle modulo 2π. Pour cela, tu peux utiliser atan2.

Diamond

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Re : Problème de rotation
« Réponse #7 le: Mars 05, 2015, 09:49:50 pm »
Ce que tu me dit m'a l'air pas mal du tout  ;D je n'y avais pas du tout pensé, j'essaierai ca demain
Merci beaucoup pour votre rapidité !

Diamond

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Re : Problème de rotation
« Réponse #8 le: Mars 06, 2015, 07:34:43 pm »
Voila, la rotation se fait maintenant très bien , seul petit problème restant, le fait d'afficher un ConvexShape (semi-transparent) d'environs la taille de mon écran fait chauffer mon ordi à peine je lance le programme, est-ce normal ?  :o

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Problème de rotation
« Réponse #9 le: Mars 06, 2015, 09:47:28 pm »
Si tu limites pas le nombre d'images par secondes (en activant la synchronisation vertical ou en limitant les FPS) ça tourne à plein régime.