[Algo] - RollerCoaster

- RollerCoaster [Algo] - Algo - Programmation

Marsh Posté le 29-08-2003 à 21:05:19    

EDIT :  
 
Bon voila j'ai presque fini  :sol:  
Jarrive a tordre les rails now, et tout marche vraiment bien
le seul probleme persiste dans les looping(voir photo)pour calculer lorientation dun rail je calcule le vecteur  perpendiculaire de deux points qui se suivent dans le trace
 
donc jai les 2 points p0 p1 (en vert)
 
je calcule le vecteur (en bleu):
 
 

Code :
  1. v0=Vector(p0,p1);
  2. puis
  3. vp=Perpendicular(v0);
  4. vertex Vector(vertex v1, vertex v2){
  5. vertex vv;
  6. vv.x=v2.x-v1.x;
  7. vv.y=v2.y-v1.y;
  8. vv.z=v2.z-v1.z;
  9. return vv;
  10. }
  11. vertex Perpendicular(vertex v1){
  12. vertex vv;
  13. vv.x=-v1.z;
  14. vv.y=0; 
  15.         vv.z=v1.x;
  16. Normalize(&vv);
  17. return vv;
  18. }


 
 
http://users.skynet.be/fa218598/555.png
 
la premiere photo est vue de cote, la deuxieme la meme boucle mais vu du dessus
 
on voit clairement qua mi-hauteur de la boucle il y a une inversion  :(  
 
j'ai volontairement retirer tout les elements pour quon voit bien le probleme
 
 
PS : je sais que je pourrais surdefinir loperateur = pour vertex blablabla mais je suis oblige de le faire en c (c pour une demo (4k) et la taille est tres importante)
 
j'ai pas change le systeme de coordonees, Y represente la hauteur...


Message édité par red faction le 01-09-2003 à 21:22:24
Reply

Marsh Posté le 29-08-2003 à 21:05:19   

Reply

Marsh Posté le 29-08-2003 à 21:14:53    

ben il me semble que le truc en 3d c'est lors du chargement on stocke les sin et cos dasn un tableau ainsi plus besoin de faire les appels tout le temps.
 
c'est des montagne russe ??

Reply

Marsh Posté le 29-08-2003 à 21:16:23    

je vois pas ce que tu evux faire :??:
(avec tes splines j'entend)
 
(le reste arrive)

Reply

Marsh Posté le 29-08-2003 à 21:17:17    

fFluFf a écrit :

ben il me semble que le truc en 3d c'est lors du chargement on stocke les sin et cos dasn un tableau ainsi plus besoin de faire les appels tout le temps.
 
c'est des montagne russe ??


 
fini ce tps la, maintenant on privilegie l'optimisation memoire a l'optimisation d'instruction (meme si eviter de faire 25685 sqr c tjs ca de pris)
 
en l'occurence les tables de cos/sin, byebye

Reply

Marsh Posté le 29-08-2003 à 21:17:37    

fFluFf a écrit :

ben il me semble que le truc en 3d c'est lors du chargement on stocke les sin et cos dasn un tableau ainsi plus besoin de faire les appels tout le temps.


a oui ca je c. c clair que tu te tappe pas les calculs a chaque fois
 
le probleme c de determine les points r1 r2
 
en 2d c lequation dun cercle mais ici  :??:  
 

fFluFf a écrit :


c'est des montagne russe ??


 
oui  :D  
bon spa tres joli mais pour linstant ca sert plus de debug qu'autre chose


Message édité par red faction le 29-08-2003 à 21:19:06
Reply

Marsh Posté le 29-08-2003 à 21:18:35    

chrisbk a écrit :


 
fini ce tps la, maintenant on privilegie l'optimisation memoire a l'optimisation d'instruction (meme si eviter de faire 25685 sqr c tjs ca de pris)
 
en l'occurence les tables de cos/sin, byebye
 


 
ca me rappelle les bon vieux plasma en mode 13h   :sol:


Message édité par red faction le 29-08-2003 à 21:20:17
Reply

Marsh Posté le 29-08-2003 à 21:24:09    

sinon le rapport entre le dessins avec les courbes et lhistoire du cone , c pour permettre de tordre les rails (ce qui nest pas possible pour linstant , ce qui explique la courbe du looping qui est cassée...
 

Reply

Marsh Posté le 29-08-2003 à 21:28:33    

ben a mon avis pour trouver r1 et r2 c'est complique a expliquer:
tu parle d'angle de rotation donc tu dois avoir une position par defaut (r0).
 
Si tu as r0 => simple rotation 3d (avec des matrices & co)
 
Si tu dois calculer r0:
tu cherche un vecteur perpendiculaire a p1-p2 et tu as ton r0 a la distance :p2-r0 :D
 
C'est vrai que c'est facil à dire(ecrire) désolé j'ai pas d'alcgo sous la main :(
Je cherche de mon coté ca m'interesse aussi :p

Reply

Marsh Posté le 29-08-2003 à 22:18:09    

jviens ptet de trouver
 
en 2d on a  
 
x=cos  
y=sin  
 
pourquoi ne pas implementer z avec aussi un cos(mais decale)
 
c ptet nimporte quoi ... je teste
 
EDIT : marche pas


Message édité par red faction le 29-08-2003 à 22:35:38
Reply

Marsh Posté le 29-08-2003 à 22:40:23    

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 :P ).
 
LeGreg

Reply

Marsh Posté le 29-08-2003 à 22:40:23   

Reply

Marsh Posté le 29-08-2003 à 22:49:40    

heu langle de depart je le connais c une donnnee
p1 et p2 sont connus aussi
 
p1 et p2 serait un peu comme deux pilliers du roller coaster
ett r1 et r2 lendroit par lequel  passe les rails
 
r1 et r2 sont toujours oppose dun angle Pi (180degres donc) sinon les rails ne sont plus parralles ce qui pose un petit probleme  :whistle:  
 
en donnant un angle, je pourrais faire pancher les rails
 

Reply

Marsh Posté le 29-08-2003 à 23:07:47    

euh moi j'ai ptet un idée mais c'est un peu le bordel.. bon je tente kan meme
tu dois savoir ke tu pe tiré un vecteur orthogonal à 2 vecteurs coplanaires, suffit de faire un produit vectoriel. 2 vecteur coplanaire forme un angle ke tu pe retrouver avec un produit scalaire. Donc prenont les 2 points p1 et p2, on a le vectuer p1p2. apres tu fixe le point r1 de maniére a ce ke p1p2 soit orthogonal à p2r1. pour trouver r1 c'est simple : cos(90) = 0
donc on a p1p2*p2r1 = 0. ensuite si tu fais le produit vectoriel de p1p2 et p2r1 tu trouve le point r2 tel que p2r2 est orthogonal a p2r1 et a p1p2. Apres tu normalise les vecteurs p2r1 et p2r2 et tu aura les 2 vectuer directeur de l'unique plan auquel p1p2 est normal, et en plus p2r1 et p2r2 sont de meme norme et sont orthogonal, donc ca te fait un jolie petit repere orthonormal ou tu pe retrouvé un angle avec sinus cosinus les doigt dans le nez, apres t'a plus qu'a transformé les valeurs 2d de ton point en 3d, mais ca c'est facile alors j'explique po

Reply

Marsh Posté le 29-08-2003 à 23:15:54    

merci  [:prosterne]  
 
jvais regarder a tous ca
 
si jarrive a faire qqchose de bien un ptit update...
 
et qui sait une nouveau screen  :D

Reply

Marsh Posté le 29-08-2003 à 23:21:37    

jsuis entrain de travailler chez moi endessous de la lampe de bureau  pour voir la projection des ombres dun crayon (donc la projection 2d)
 
jvous raconte pas le bordel  [:yamusha]

Reply

Marsh Posté le 29-08-2003 à 23:29:38    

pkoi tu fait ca?

Reply

Marsh Posté le 29-08-2003 à 23:43:48    

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.
 
A+
LeGreg

Reply

Marsh Posté le 30-08-2003 à 17:06:37    

[:yoyoz]

Reply

Marsh Posté le 30-08-2003 à 21:40:03    

pkoi up ? t'y arrive tjs po?

Reply

Marsh Posté le 31-08-2003 à 00:37:21    

MrX a écrit :

pkoi up ? t'y arrive tjs po?
 


 
ben si voir premier post  [:shooter]

Reply

Marsh Posté le 31-08-2003 à 14:14:44    

z'ai po pigé mais c po grave  :heink:

Reply

Marsh Posté le 31-08-2003 à 16:57:36    

ben heu si j'y suis arrive dans mon premier post jai editer et j'ai ajouter une video qui montre les points en rotation
 
enfait jai mit 4 points (en bleu) pour chaque section(en vert) les 4 points dune section  seront relies au 4 points de la section suivante de facon a former un boite (pour apres ca)
 
 
pour l'instant jessaie doptimiser un peu le code et de transformer tout ces points en polygones , apres il faudra encore ajouter les formules de physique pour le deplacement du train


Message édité par red faction le 31-08-2003 à 17:00:21
Reply

Marsh Posté le 31-08-2003 à 18:03:57    

a j'avais po vu, j'ai pigé maintenant ^^

Reply

Marsh Posté le 01-09-2003 à 21:15:47    

[:yoyoz]

Reply

Marsh Posté le 01-09-2003 à 21:16:22    

up pour quoi ??

Reply

Marsh Posté le 01-09-2003 à 21:18:16    

voir audessus c plus le meme probleme
 
sinon jefface celui ci et jen recree un nouveau

Reply

Marsh Posté le 01-09-2003 à 21:19:56    

red faction a écrit :

voir audessus c plus le meme probleme
 
sinon jefface celui ci et jen recree un nouveau


 
ah ok j'avais pas vu le changment :O

Reply

Marsh Posté le 02-09-2003 à 06:09:26    

red faction a écrit :

voir audessus c plus le meme probleme
 
sinon jefface celui ci et jen recree un nouveau


 
ben pourquoi tu ne suis pas mes conseils..
ca t'éviterait d'avoir de tels problemes..
 
LeGreg

Reply

Marsh Posté le 02-09-2003 à 10:29:22    

on peu voir les formules ke tu utilise, moi me semble ton probleme vien d'un cosinus ke tu a mal interprété

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed