Forum de la communauté SFML
Aide => Système => Discussion démarrée par: nicooomg 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:
(http://adoniczka.free.fr/Rectangle0102.gif)
Comment faire ?
merci d'avance,
nico
-
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.
-
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 ? :(
-
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é.
-
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"
-
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.