Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Faire pivoter un rectangle selons quatre points cartésien. [ Divers / General ] (ninja hacker)

jeudi 15 mai 2008 à 03:42:02 | Faire pivoter un rectangle selons quatre points cartésien.

ninja hacker

Bonjour!

J'ai entreprit de faire un petit logiciel qui gere les physique d'un jeu éventuelle que je voudrait faire. Pour l'instant je peux detecter la distance entre un caré formé de quatre point sur le plan cartésien pour detecter les colision et aussi je peux faire tourner les quatre points sur eux meme pour faire tourné le caré. Le probleme maintenant c'est que je veux pouvoir faire mon jeu avec ca... J'utilise le framework XNA pour coder mon jeu et voila pour afficher une texture sur mon caré (le personage du jeu) j'utilise un sprite batch xna. Le probleme que je rencontrer c'Est que la ligne de code pour dessiner un sprite batch resemble a ceci :

HBSB.Draw(HBTex, HBRect, Color.White)

HBSB est mon sprite batch, hbtex est ma texture et hbrect un rectangle sur lequele est afficher ma texture. Seulement je me demandais si il était possible de forcer mon rectangle a se soumettre a mes quatres points dans le plan cartésien. dans mon code c'est quand position X et Y son stocké dans 2 array : pour les x j'ai PointX(1,2,3 ou 4) et pour les Y j'ai PointY(1,2,3 ou 4). Donc si il est possible de demander au rectangle de prendre la position de mes points sa serait géniale! Sinon il existe un autre moyen auquel j'ai penser.

La fonction draw peut prendre plusieur parametre et on peu inclure plusieurs autre parametre comme la rotation du sprite batch par exemple. j'ai donc tester avec le code suivant la rotation du spritebatch :

SourceBoxSb.Draw(SourceBoxTex,

New Vector2((SourceBoxTexX + (SourceBoxTex.Width / 2) * sourceBoxScale), SourceBoxTexY + ((SourceBoxTex.Height / 2)) * sourceBoxScale), Nothing, Color.White,
SourceboxRotation,
New Vector2(SourceBoxTex.Width / 2, SourceBoxTex.Height / 2), sourceBoxScale, SpriteEffects.None, 0.0F)

Voila ce que cela ma donné. Bon sourceboxSb est mon sprite batch SourceBoxTex est ma texture SourceBoxTexX est la position X de mon caré, sourceboxscale est l'echelle de mon caré par raport a la texture original, sourceboxtexY est la position Y de mon caré, SourceBoxRotation est la rotation en radiant que je veux appliquer a mon spritebatch. Voila tout les variables utilisé dans mon code. Donc j'ai fait une petit fonction qui ajoute 1 a la rotation de sourcebox à tout les 0.01 seconde. le caré tourne a merveille sur lui meme. Seulement le probleme est que je ne suis pas en mesure de trouver la valeur de chaque point X et Y qui constitu mon caré car c'est une texture. Je ne peut donc pas appliquer tout l'algorithme que j'ai programé qui marche avec le points cartésien. Je me suis alors dit que si je mixait les deux codes et faisait un carré avec les points cartésien par desus mon sprite batch et que quand j'appliquai une modifiquation (une rotation par exemple) au sprite batch je l'apliquerai aussi a mon caré de point cartésien. Ainsi je pourais garder mon algorithme. j'ai donc essailler tout ca mais je suis arriver a un probleme. Le sprite batch tourne plus rapidement que le caré de point cartésien quand je leur applique une meme rotation. Bon je sais que ce n'est pas une expliquation tres clair alors je vais vous sortir le code pour mieu comprendre....


j'ai ce code pour faire tourner mes points cartésien autour de leur centre :

Dim CX, CY AsSingle

CX = (PointX(1) + PointX(3)) / 2

CY = (PointY(1) + PointY(3)) / 2

rotation = (rotation * PI) / 180



dim J as integer

For J = 1 To 4

PointX(J) = (Cos((rotation) * (PointX(J) - CX)) - (Sin((rotation) * (PointY(J) - CY))) + CX)

PointY(J) = (Sin((rotation) * (PointX(J) - CX)) + (Cos((rotation) * (PointY(J) - CY))) + CY)

Next
Ce code fait donc tourner mes points autour de leurs centre. Et voici le code pour le sprite batch :

SourceboxRotation += rotation

Les deux semble tourner de la meme facon mais a chaque tours que le spritebatch effectu le carré de plan cartésien tourne soit un peu plus ou un peu moin dépendant des fois que jai tester. je me suis demander si c'était a cause que la fonction de rotation inclu dans XNA était moi précise et donc je vous pose la question ... avez vous un moyen de m'aider a appliquer une texture sur mon caré de point de plan cartésien? je doute que quelqu'un me réponde... mais bon si au moin vous liser tout mon message vous ete déja courageux! merci! :P :D




Cette discussion est classé dans : points, rotation, sprite, cartésien, caré


Répondre à ce message

Sujets en rapport avec ce message

j ai 02 points quelconque, je dois chercher la matrice de rotation entre ces 02 points [ par lalas2004 ] Bonsoir,j ai 02 points quelconque et mon exercise est de trouver une matrice de rotation entre ses 02 points.merci pour votre aide NbrPts Bezier [ par ScSami ] Bonjour. Ma question s'adresse a un membre balèze en maths et particulièrement en géométrie.J'aimerais, pour une raison précise, faire une fonction qu dessiner un cylindre entre 2 points 3D [ par TECAE ] Bonjour,    je cherche, à dessiner un simple cylindre entre 2 points définis par leurs coordonnées A(xa,ya,za) et B(xb,yb,zb). j'ai vu qu'il existait Rotation d'un panel [ par bocyr ] Bonjour à tous,Je voulez savoir s'il était possible d'effectuer ube rotation à un panel. Si oui comment faut-il procéder?Merci de vos réponses. Fichier de points en streaming [ par crocejf2000 ] Bonjour à vous tous,Dans un fichier, j'ai des valeurs stocké sous la forme suivante : 2007011910104210.492007011910104310.792007011910104410.642007011 Gestion des points et des virgules [ par SodeXhinE ] Bonjour,J'ai un problème pour gérer les nombre decimaux..J'ai ecris sous VB6 un programme qui me permait de gerer des fiches recettes, ces fiches rece réalisation d un programme de transport de torseur [ par kenzaaix ] Je souhaite réaliser un programme de transport de torseurobjectif du travail: le code réalisé doit permettre de transporter un torseur donné d'un poin Distance entre 2 points [ par dthuler ] Bonjour,Je cherche la distance entre 2 points définis par les coordonnées cartésiennes. Pour ce faire, j'utilise la formule suivante :Sqr((Longi - !Co Générer un classement [ par Bogorno ] Bonjour, Je suis débutante et je voudrai faire une application capable de générer le classement d'une course. 1- Entrée des données des courreurs: Nom tracer des points [ par laputainresp ] Bonjour,Je débute en VB et j'ai un projet info à réaliser :le programme doit établir une courbe de régréssion linéaire à partir d'un relevé de points.


Nos sponsors

Sondage...

CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.