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

Auteur Sujet: sf::Rect contenant un Point  (Lu 3069 fois)

0 Membres et 1 Invité sur ce sujet

nicooomg

  • Jr. Member
  • **
  • Messages: 66
    • Voir le profil
sf::Rect contenant un Point
« le: Janvier 10, 2013, 08:10:28 pm »
Bonjour,

j'aimerais savoir comment faire pour verifier qu'un sf::Rect contient bien un point.
Le probleme, est que ce rectangle est en biais

exemple:


Comment faire ?

merci d'avance,

nico

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::Rect contenant un Point
« Réponse #1 le: Janvier 10, 2013, 08:42:59 pm »
Un sf::Rect ne peut pas être tourné, il est forcément aligné sur les axes. Du coup j'imagine que tu gères toi-même la rotation à côté.

Bref, pour répondre à ta question, tu as deux solutions :
- soit sortir un algo de test de point dans un polygone (convexe) quelconque
- soit transformer le point dans le repère du rectangle

Je recommande la seconde option : transformer un point est toujours super simple, et ensuite tester un point dans un rectangle aligné est tout aussi simple.
Laurent Gomila - SFML developer

nicooomg

  • Jr. Member
  • **
  • Messages: 66
    • Voir le profil
Re : sf::Rect contenant un Point
« Réponse #2 le: Janvier 10, 2013, 08:59:26 pm »
Comment suis-je censé transformer mon point en ayant l'angle ?
Peut etre avec sf::Transformable ? Mais alors, quelle est la différence entre setPosition & setOrigin ?
Et comment tester ensuite la position, si je suis plus dans mon repete abs/ord ? :(
« Modifié: Janvier 10, 2013, 09:30:55 pm par nicooomg »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::Rect contenant un Point
« Réponse #3 le: Janvier 10, 2013, 10:09:37 pm »
Il faut appliquer l'inverse des transformations qui sont appliquées à ton rectangle. Je ne sais pas comment tu les gères, donc je ne peux pas te dire concrètement comment faire.

Ensuite, une fois dans le repère local du rectangle, celui-ci est définit par le rectangle aligné [0, 0, width, height] (ou bien [0,0, 1, 1] si tu inclus la taille dans les transformations, ou au contraire [x, y, width, height] si tu n'inclues que la rotation), il ne te reste plus qu'à tester ce rectangle avec ton point transformé.
Laurent Gomila - SFML developer

nicooomg

  • Jr. Member
  • **
  • Messages: 66
    • Voir le profil
Re : sf::Rect contenant un Point
« Réponse #4 le: Janvier 10, 2013, 10:20:54 pm »
En fait, je n'applique aucune transformation a mon rectangle.
En effet, a la base ce n'est qu'une ligne définiepar x1 y1 et x2 y2.

Je fais donc, sf::RectangleShape avec x1 y1, et la longueur calculée entre les deux points
et j'applique une rotation calculée egalement.
j'y ajoute une hauteur de 20px, qui est donc un peu fausse, mais me sert juste pour mieux visualiser la ligne (et puis voir si la souris se trouver dedans (enfin, sur la ligne :D))

Mais je ne sais pas comment appliquer ca a un point pour ensuite verifier si il est dans le "rectangle"

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : sf::Rect contenant un Point
« Réponse #5 le: Janvier 11, 2013, 08:05:28 am »
Quand je dis "transformations", je parle au sens large, de ce qui fait que ton rectangle est positionné, tourné et dimensionné. Applique l'inverse à ton point.
Laurent Gomila - SFML developer