Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1600 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  [Algo] Rollercoaster part II [presque resolu le prob voir en bas]

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Algo] Rollercoaster part II [presque resolu le prob voir en bas]

n°524963
red factio​n
Posté le 28-09-2003 à 17:00:38  profilanswer
 

J'avais deja demande une fois mais personne navait compris alors jvais essaye de nouveau
 
 
http://users.skynet.be/fa218598/graph.png
 
 
PS : je c mon schema est digne dun gamin de 5 ans mais jai fait ca en 2min
 
 
Au depart j'ai les points par lequels passe la courbe (carré rouge) et les points de controle (carré vert)
de la je peut calculer une courbe (que je ne stocke pas) grace au cubic splines  
bon les point sur cette courbe donne par la formule ne sont pas equidistants (plus concentres lorsque ca courbe, c logique)
pour avoir des points equidistants je  calcule la distance du point de depart au points courant et lorsque que une certaine valeur a ete atteinte je place le point (croix bleu)  
de cette facon jobtient des points equidistants (les croix bleues que je stocke)
 
-------------------------------------
 
ce que jaimerai maintenant c trouver lorientation du rail  
 
bon certains vont dire c pas difficile tu prend la tangente a la courbe puis la perpendiculaire a cette tangente oui mais ici c en 3D
ce que je faisais au depart :  
 
je projete 2 points de la courbe sur le sol (donc je tient uniquement compte de X et Z , Y -> poubelle ca donne un peut comme la vue du dessus)
je calcule le vecteur des 2 points projetes  
je prend la perpendiculaire de ce vecteur (en bleu clair sur le schema du bas)
appelons le vect1
 
 
je prend le vecteur formé par deux points qui se suivent dans la courbe de depart ( sur le schema de dessus en rose)
appelons le vect2  
 
 
jai deux vecteur vect1 et vect2 -> je prend la normale et jai mon vecteur qui mindique lorientation du rail (les traits sur le looping)
 
 
ca marche tres tres bien sauf dans les boucles ou a mi hauteur ca foire car le sens du tracé s'inverse...
 
 
 
 
------------------------------
 
 
Le greg mavait donné une solution mais je ne comprends pas tout... Je ne comprends deja pas le debut avec T , N et B
 
T ok mais pour les autres ...
 

Citation :


Le greg :
il te manque une info.
effectivement il te faut un point de départ sur le cercle pour déterminer un angle !
 
L'idéal c'est qu'en plus du déplacement entre p1 et p2 tu aies aussi paramétré le changement d'orientation du systeme
(T,N) avec T, le vecteur tangent à la courbe de ton déplacement et N, un vecteur qui représenterait ton orientation. (il manque un vecteur à ta base mais il découle de T et de N, du moment que tu sais si tu es gaucher ou droitier ce qui déterminera dans quel sens tourneront r1 et r2 en fonction de ton angle Theta).  
 
C'est pas aussi simple qu'en 2D mais en 3D il faut changer de systeme de pensée.
 
Attention à la façon dont tu parametres ta courbe de déplacement et à la gestion des points critiques (j'espere que si c'est un ride et que tu as des points critiques tu ne vas pas faire subir des accelerations infinies aux clients de tes montagnes russes   ).
 
Le greg 2:
Peut-etre que je n'étais pas clair alors on va la refaire.
 
A ton point de départ (appelons le p0)  
tu as l'orientation de ton rail défini par (T0,N0,B0).
Information que tu connais précisemment.
 
pour passer du point n au point n+1,
tu as besoin de plusieurs choses: le déplacement p(n+1) - p(n)
que tu obtiens en échantillonnant ta courbe paramétrée.
Et le changement de l'orientation de ton système (Tn, Nn, Bn).
 
Pour calculer Tn+1 c'est tres facile il s'agit de la tangente à ta courbe au point p(n+1). (si tu as du mal a calculer la tangente, fais moi signe). Le passage de Tn à Tn+1 constitue un premier changement d'orientation. Tu peux construire une matrice, un quaternion ou ce que tu veux pour passer de l'un à l'autre.
(si tu as de la misere pour construire la matrice de passage de Tn à Tn+1 fais moi signe).
 
Tu as aussi fait le choix d'avoir un deuxième changement d'orientation représenté par un angle Théta. Cet angle Théta tout seul ne veut pas dire grand chose, donc on va dire que ça représente un angle de rotation selon l'axe ORIENTÉ par Tn+1 (après que tu aies appliqué la première transformation donc.. le résultat ne sera évidemment pas le même si tu changes l'ordre d'application des transformations).
Cela constitue une deuxieme matrice de passage ou un deuxième quaternion. (si tu as de la misère à calculer cette deuxieme matrice de passage fait moi signe)
Pour obtenir la transformation globale de ton système (Tn,Nn,Bn) tu dois donc composer ces deux transformations dans le bon ordre.  
 
Maintenant comment calculer la position des rails ?
C'est simple si r est ton rayon, le premier rail est en pn + r*Bn et le deuxieme est en pn - r*bn.


Message édité par red faction le 05-10-2003 à 02:08:51
mood
Publicité
Posté le 28-09-2003 à 17:00:38  profilanswer
 

n°524986
red factio​n
Posté le 28-09-2003 à 17:20:29  profilanswer
 

http://users.skynet.be/fa218598/rend.jpg


Message édité par red faction le 28-09-2003 à 17:20:47
n°525276
LeGreg
Posté le 28-09-2003 à 23:44:28  profilanswer
 

Est-ce que tu connais le principe de bases d'orientation?
(Peut-etre introduit en physique ou en mécanique ?)
 
T, N, B est ce que j'appelerais une base locale. Tu peux aussi l'appeler x',y',z' par opposition à la base qui définit les coordonnées de ton monde x,y,z.
 
NB: Tu peux en trouver d'autres: Tangente, rayon de courbure et normale au plan de courbure constituent une autre base locale tirée de ta courbe paramétrée. Mais celle ci est peu interessante parce que le rayon de courbure a une facheuse tendance à passer par l'infini.
 
Ce que j'expliquais dans mon post c'est qu'on pourrait idealement faire varier l'orientation  independamment de la position.  
Ton systeme deviendrait : { x(t), y(t), z(t), theta(t) }
NB: Pour des raisons de simplicité j'ai relié l'une des orientations du vehicule à la tangente à la trajectoire des rails. Mais on pourrait imaginer un manege un peu plus évolué ou l'orientation du module soit dépendant d'un nouveau parametre phi(t). Ainsi le vehicule pourrait pointer dans des directions opposées ou perpendiculaires à son déplacement.
 
exemple de fonction theta(t): une simple
rampe entre 0(au moment t0) et 2 * pi (au moment t1)
theta(t) = 2 * pi * (t - t0)/ (t1 - t0)
 
Ainsi tes rails peuvent aller en ligne droite et le vehicule faire un tour complet sur lui-meme.
 
LeGreg

n°525288
red factio​n
Posté le 29-09-2003 à 01:18:24  profilanswer
 

mhhh jcommence a capter merci bien  :)  
 
donc en fait on oriente le point grace a 3 vecteurs :  
 
T, B et N
 
on fait de meme pour le point suivant (p+1)
 
puis on essaie de faire la transition entre les 2 orientations grace a un quaternion, une matrice....
 
oki(bon jespere que c a peu pres ca)
 
-----------
 
donc on a pour orienter  le point on a  
 
-> la tangente au point
-> la normale  
-> l'orientation (pour langle )
 
c bon la ?
 
 
 
 
 
 

n°525289
red factio​n
Posté le 29-09-2003 à 01:22:47  profilanswer
 

je c jai du mal mais jai jamais eu de cours la dessus et je fait juste ca comme ca pour le fun qd j'ai un peu de temps libre  [:yamusha]


Message édité par red faction le 29-09-2003 à 01:23:08
n°526395
red factio​n
Posté le 29-09-2003 à 22:45:37  profilanswer
 

[:yoyoz]

n°526450
Le Castor
Neurasténique...
Posté le 29-09-2003 à 23:04:39  profilanswer
 

Tu va ici :
 
http://www.nolimitscoaster.de/
 
Tu télécharges la version démo, tu désassemble le .exe, tu cherches ce qui t'intéresses, tu traduit en C++, et pis voilà [:audi]


---------------
W3C : Leading the Web to Its Full Potential... - Membre du W3C l33t club
n°526496
THE REAL S​MILEY
The Real Résistance!
Posté le 29-09-2003 à 23:27:18  profilanswer
 

Le Castor a écrit :

Tu va ici :
 
http://www.nolimitscoaster.de/
 
Tu télécharges la version démo, tu désassemble le .exe, tu cherches ce qui t'intéresses, tu traduit en C++, et pis voilà [:audi]  


 :love: Sympa comme truc, à quand le même pour un jeu ?

n°526517
red factio​n
Posté le 29-09-2003 à 23:49:20  profilanswer
 

Le Castor a écrit :

Tu va ici :
 
http://www.nolimitscoaster.de/
 
Tu télécharges la version démo, tu désassemble le .exe, tu cherches ce qui t'intéresses, tu traduit en C++, et pis voilà [:audi]  


 
jconnais ce prog c justement de la que lidee m'est venue et que je me suis un peu inspiré  :whistle:

n°526557
youdontcar​e
Posté le 30-09-2003 à 03:04:49  profilanswer
 

red faction a écrit :

je projete 2 points de la courbe sur le sol (donc je tient uniquement compte de X et Z , Y -> poubelle ca donne un peut comme la vue du dessus)[...]

Ta méthode d'orientation m'a l'air bien compliquée, je ferais plutôt ça avec tangentes + coords sphériques.
 
Pour trouver la tangente d'une courbe C à un temps t, tu fais la méthode bourrin ( C(t+epsilon) - C(t-epsilon) ), ou la méthode clean (si ta courbe est du genre x = x^3 + 2*x + 4, x' = 3x^2 + 2).  
 
Ensuite, tu normalises ta tangente puis tu la passes en coords sphériques http://mathworld.wolfram.com/SphericalCoordinates.html . Ça te donne deux angles, qui seront en fait les rotations à faire subir à chaque 'cercle de points' de ton rollercoaster.

mood
Publicité
Posté le 30-09-2003 à 03:04:49  profilanswer
 

n°527515
red factio​n
Posté le 01-10-2003 à 08:52:14  profilanswer
 

[:yoyoz]  
 
si qqn pouvait me dire si lhistoire dorientation T B N est correct

n°531624
red factio​n
Posté le 05-10-2003 à 00:41:05  profilanswer
 

Bon on prend un point de la courbe (croix bleue sur le dessin du premier post)
Ensuite on calcule la tangente de ce point par rapport a la courbe.
je normalise cette tangente et jobtient un vecteur ( appellons le vect a)
 
 
 
On fait la meme chose pour un autre point de la courbe (la croix bleue suivante) (jobtient vect b).
 
bon vect a et vect b oriente differement l'un de l'autre. On peut imaginer que vect a à subit plusieurs rotations pour donner vect b ok?? je voudrait appliquer à un vecteur ce qu'on a fait subir à vect a pour donner vect b.
 


Message édité par red faction le 05-10-2003 à 14:32:49
n°531804
red factio​n
Posté le 05-10-2003 à 13:43:21  profilanswer
 

[:yoyoz]  
 
personne ne sait maider pour le post un cran plus haut

n°531811
youdontcar​e
Posté le 05-10-2003 à 14:21:41  profilanswer
 

Reformule ta question, c'est incompréhensible. Relis-toi et utilise la ponctuation.

n°531818
red factio​n
Posté le 05-10-2003 à 14:33:06  profilanswer
 

nouvel essai :D

n°531834
youdontcar​e
Posté le 05-10-2003 à 15:04:43  profilanswer
 

Haaa !
 
Si tu bosses en coords sphériques, tu convertis chaque vecteur en paire d'angles, la différence te donne la transformation.  
 
ou
 
arcos(produitScalaire(a, b)) te donne un angle de rotation autour de l'axe formé par produitVectoriel(a, b).  
 
Mais je ne vois pas pourquoi tu veux faire ça. Je reste sur la méthode que j'ai expliqué plus haut : coords sphériques pour tourner les 'cercles de points'.

n°531841
red factio​n
Posté le 05-10-2003 à 15:14:31  profilanswer
 

le vecteur auquel jaimerai appliquer "ce qu'on a fait subir à a pour obtenir b" c un vecteur qui correspond a la premiere croix et qui pointe vers le haut (vers le ciel quoi).
 
 
En lui appliquant les trans jobtient le meme vecteur mais pour b


Message édité par red faction le 05-10-2003 à 15:15:32
n°531844
youdontcar​e
Posté le 05-10-2003 à 15:18:11  profilanswer
 

red faction a écrit :

le vecteur auquel jaimerai appliquer "ce qu'on a fait subir à a pour obtenir b" c un vecteur qui correspond a la premiere croix et qui pointe vers le haut (vers le ciel quoi).

Pourquoi veux-tu faire ça ?

n°531846
red factio​n
Posté le 05-10-2003 à 15:22:55  profilanswer
 

comme ca jobtient a chaque fois lorientation de mes rails  
 
definie par 2 vecteurs : la tangente et le vecteur que jai calculé par la methode dont je viens de parler
 
(ce vecteur correspont a peu pres a la facon dont les gens sont positionnes dans le wagon sil se tenaient debout)  
 

n°531848
youdontcar​e
Posté le 05-10-2003 à 15:24:34  profilanswer
 

red faction a écrit :

comme ca jobtient a chaque fois lorientation de mes rails  
 
definie par 2 vecteurs : la tangente et le vecteur que jai calculé par la methode dont je viens de parler
 
(ce vecteur correspont a peu pres a la facon dont les gens sont positionnes dans le wagon sil se tenaient debout)

Tu n'as pas besoin de faire ça pour connaître ton vecteur, c'est le perpendiculaire à la tangente.

n°531850
red factio​n
Posté le 05-10-2003 à 15:26:01  profilanswer
 

des perpendiculaires yen a plein non ?
 
suffit de considerer la tangente comme un axe de rotation

n°531859
youdontcar​e
Posté le 05-10-2003 à 15:37:45  profilanswer
 

red faction a écrit :

des perpendiculaires yen a plein non ?

En 3d, oui. Ensuite, celle le plus simple à obtenir est celle dont je parlais en coords sphériques. Fais déjà ça, ça règlera ton problème de renversement.
 
Ensuite, tu peux prendre un point de la courbe, un devant, un derrière. S'ils ne sont pas alignés, ces trois points forment un plan. Trouve la normale à ce plan, c'est ta perpendiculaire.

n°531861
polo021
Posté le 05-10-2003 à 15:44:52  profilanswer
 

c'est le vampire  :love:  
 
http://www.nolimitscoaster.com/Limit03_640.jpg

n°531863
red factio​n
Posté le 05-10-2003 à 15:47:02  profilanswer
 

youdontcare a écrit :

En 3d, oui. Ensuite, celle le plus simple à obtenir est celle dont je parlais en coords sphériques. Fais déjà ça, ça règlera ton problème de renversement.
 
Ensuite, tu peux prendre un point de la courbe, un devant, un derrière. S'ils ne sont pas alignés, ces trois points forment un plan. Trouve la normale à ce plan, c'est ta perpendiculaire.


 
 
c pas con du tout ca  :)   reste que les points risque detre souvent alignes mais bon jvais essaye qd meme
 

n°531864
red factio​n
Posté le 05-10-2003 à 15:48:32  profilanswer
 


 
ouais ben jespere faire ca mais en 4k avec de la zik et tout
 
pour linstant jsuis a 3,5k a peu pres meme si ya des trucs qui me servent juste pour le debug a retirer

n°531914
red factio​n
Posté le 05-10-2003 à 17:43:01  profilanswer
 

nempeche que pour la montee de depart, pour determiner le plan c mal parti

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  [Algo] Rollercoaster part II [presque resolu le prob voir en bas]

 

Sujets relatifs
[debutant][Resolu] Attraper les Erreurs SQL[VB6]Créer une frame à part, et la charger dans la Form par la suite
[RESOLU] euh pkoi ca marche pas cette image??Problème validation XHTML 1.0 - résolu, merci beaucoup :o)
Problem d algo : ordonner une file en utilisant des fct file (push ..)[RESOLU] Question formattage de nombre...
cout -> outtext [résolu][C++] Dernier sujet sur les dialogbox [resolu]
chtite question sur system [résolu]formulaire: afficher le contenu des champs dans une fenetre a part!
Plus de sujets relatifs à : [Algo] Rollercoaster part II [presque resolu le prob voir en bas]


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR