|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : février 2009 Messages : 41 ![]() |
Bonjour à tous
Je me suis donc en quête d'informations, mais mon niveau de Seconde (passage en 1ere S après les vacances) ne permet parfois de pas tout comprendre. Pour le moment, j'ai fais un système très basique et pourtant très gourmant (bien sûr la structure n'est pas bonne) : - je définis un poids à chaque point de mon polygone convexe - pour chaque point de chaque objet (je sais je sais - si elle renvoie true je fais rien, si il elle renvoie false je diminue la valeur y de chaque point de l'objet concerné par son poids Le système marche pour 2 solides, même si le deuxième semble s'écraser sur le premier (normal vu que TOUS les points subissent leurs poids, sans tenir compte du solide :-° ) mais à partir de 3 c'est n'importe quoi, l'ordi mouline, les collisions bug, bref, c'était bien sûr une idée mais elle n'est pas vraiment bonne. Je me suis renseigné à pas mal d'endroits, et j'ai entendu parler des Rigid Body, des corps solides soumis à plusieurs théorèmes, mais je n'ai pas compris grand chose à leur sujet. J'ai aussi découvert le théorème "Separating Axis Theorem", mais la source étant en anglais j'ai pas tout compris, même si la méthode semble simple (il faut que je relise ça encore) Voilà c'est juste pour savoir si vous pouvez un peu me renseigner, même s'il y a déjà beaucoup de topics sur la physique 2D sur ce site, j'ai du mal avec certaines notions, voilà, je vous remercie d'avance pour votre aide |
|
|
00
|
|
|
#2 |
|
Invité régulier
![]() Inscription : février 2009 Messages : 41 ![]() |
j'ai un peu avancé, en découvrant le théorème de la séparation des axes et sa mise en oeuvre, mais il y a une chose que je n'ai pas compris :
On parle de projection des points via un produit scalaire... Or à ma connaissance le produit scalaire sert à calculer un angle .... ? j'aimerai avoir quelques précisions là dessus car je ça m'empêche d'implanter l'algorythme dans mon code. |
|
|
00
|
|
|
#3 | ||||
|
Invité régulier
![]() Inscription : février 2009 Messages : 41 ![]() |
J'ai encore bien avancé, j'ai compris la notion du produit scalaire, j'ai implanté tout dans le code.
Néanmoins , je me posais une question, dans ma programmation actuelle, j'ai besoin d'un vecteur qui relie les deux polygones par le centre. Code :
Code :
Sauf que mon système gère les polygones convexes quelconques. Je dois donc pour l'instant définir le centre moi même à l'oeil via la souris ... et de plus pour une Bounding Box le résultat est très bizarre, en effet la collision n'est détecté qu'au niveau du centre !! (ce qui n'est pas le cas pour les autres polygones à quelques approximations du au centre) donc : - premièrement il faut que je règle ce problème de bounding box, à savoir que j'utilise exactement le même algorithme que pour les polygones quelconques (et que ça marchent pour eux), je me demandais pourquoi il y a ce problème ? Sachant que je continue de chercher. - Deuxièmement, il faut que je trouve un meilleur système pour tous les polygones, car lorsque je n'ajoute pas ce vecteur qui relie les deux objets, les calculs sont systématiquement négatifs et donc faux, pourtant j'ai vu des codes sur internet qui semble ne pas avoir à calculer le centre (pourtant pour moi impossible de le mettre en oeuvre...) ou alors il faut que je trouve un moyen rapide de calculer le centre d'un objet, à savoir en trouvant l'intersection des diagonales, mais j'ai du mal à voir comment.... Voilà merci d'avance pour vos réponses quelle qu'elles soient |
||||
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : avril 2003 Messages : 898 ![]() |
j'avais fait cet exemple avec la méthode de l'axe séparateur.
C'est du basic, ça doit être assez simple à comprendre ? De plus je n'utilise pas de fonctions API, donc ce code devrait fonctionner avec la version démo de PureBasic (gratuit), c'est toujours mieux de faire tourner un code, de s'amuser à le modifier pour le comprendre. Pour en revenir à la méthode, elle fonctionne avec n'importe quel polygone convexe. Pas besoin de connaitre le centre.
__________________
Vous souhaitez participer à la rubrique PureBasic (tutoriels, FAQ, sources) ? Contactez-moi par MP. |
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : février 2009 Messages : 41 ![]() |
Oulah oui, la source est intéressante, je regarde, mais c'est assez différent du C++. Que veut dire "dim" ? Il y a des trucs que je comprend pas, comme NoAxe. Je regarde en profondeur la fonction CollisionPolygone() mais je vois qu'on met en paramètre Distance, ce ne serait pas ce vecteur qui relie les deux objets ? Je continue d'analyser là, en tout cas merci
|
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : avril 2003 Messages : 898 ![]() |
Oui c'est différent du C++ et pourtant j'ai suivi un tutoriel en C++ (je crois) pour écrire ce code
ça serait donc mieux pour toi d'avoir l'original, malheureusement je n'ai pas gardé le lien, en cherchant un peu peut-être que tu le retrouveras ? j'ai mis le nom de l'auteur dans le code. Sinon Dim permet de déclarer un tableau (la doc est en ligne ici) Distance est calculée dans la procédure CollisionReponse() Effectivement dans ce code je connais le centre des polygones puisqu'ils sont construits autour du centre (rectangles, cercles, triangles, hexagones, etc), ça se passe dans la procédure ConstructionPolygone() NoAxe ; c'est l'index sur le tableau Axe() , qui contient l'ensemble des axes séparateurs possibles.
__________________
Vous souhaitez participer à la rubrique PureBasic (tutoriels, FAQ, sources) ? Contactez-moi par MP. |
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : février 2009 Messages : 41 ![]() |
Merci de ta réponse
Tu as donc besoin des centres des polygones si je ne me trompe pas ? |
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : avril 2003 Messages : 898 ![]() |
Je n'ai pas retrouvé le lien exact que j'avais utilisé, mais une bonne piste pour toi.
Olivier Renault explique en détail ses codes sur la méthode ici Regarde le premier lien , il a pris la peine de faire des beaux dessins pour tout expliquer. J'avais trouvé une archive qui contenait l'ensemble sous forme de pdf, c'était plus facile à consulter, mais là je te laisse chercher
__________________
Vous souhaitez participer à la rubrique PureBasic (tutoriels, FAQ, sources) ? Contactez-moi par MP. |
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : février 2009 Messages : 41 ![]() |
C'est la dessus que tu as basé ton algorithme ?
Tu n'utilises pas les centres donc toi dans ton code ? tu as l'air d'en parler Le deuxième lien est mort, je regarde le premier |
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() Inscription : février 2009 Messages : 41 ![]() |
Bon je suis super content j'ai trouvé une solution tout seul comme un grand !
En fait la nécessité d'avoir les centres, c'est parce que j'envoyais toujours les coordonnées des vertices pour la projection. Ou est le problème vous allez me dire ? Et bien les vertices sont des vecteurs dans mon cas, ce sont des coordonnées relatives (ou plutot x et y sont la longueur du vecteur quoi) j'étais donc obligé d'y additionner ce vecteur Offset pour replacer mon vecteur au bon endroit et avoir des valeurs min et max correct, car comme chacun sait, un vecteur peut être en 0,0 ou 5,1 ce sera toujours le même vecteur. C'est pourquoi mes calculs de distance entre les projections étaient faux Maintenant j'envoie donc les points de chaque objet pour la projection, et là ce sont bien des coordonnées réelles plus besoin du centre de l'objet Y'a des jours comme ça on bloque sur un problème ^^ mais là on peut dire que je suis content. |
|
|
00
|
|
|
#11 |
|
Expert Confirmé
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 1 802 ![]() |
salut,
le centre de gravité d'un objet quelconque c'est juste un calcul de de position moyenne en fonction des coefficients que l'on attribut à chaque point (leur masse en physique élémentaire) et que l'on divise par la masse totale le centre de gravité d'un système de n points:
ça s'applique aussi bien à un objet dont on utilise les coordonnées des sommets qui définissent son pourtour ou à un assemblage de plusieurs objets formant un système lié le centre de gravité est l'endroit de l'objet (ou du système) où on applique les forces pour le faire se déplacer (attention je parle pas des rotations autour du centre de gravité engendrées par le point réel où s'appliquent les différentes forces). c'est donc le point de référence qui doit permettre de bouger l'objet en fonction de ce qu'il subit comme forces si on considère un objet (ou système d'objets) homogène (dont chaque élément est constitué d'un seul matériau donc ayant une masse identique) alors chaque point le constituant a la même masse élémentaire:
ça simplifie énormément les formules:
si ça peut t'aider
__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com