See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: Comment tester un crash ?????  (Read 2175 times)

0 Members and 1 Guest are viewing this topic.

Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
10 November 2010, 16:06:02
Les challenges avancent, j'en suis à une des phases de finalisation : les crash tests.

J'aimerai tester la violence des chocs que peu subir le vaisseau, pour pouvoir mettre des pénalités si on atterit trop violamment ou passer en echec si vraiment on va trop loins.

et là je nage.
j'ai essayé de tester le vecteur de force (GetForceVector()) de l'api Vessel

La valeur retournée est en N

Mais le résultat est mitigé. j'ai des valeurs très très différentes et pas facile à exploiter.
Déjà au démarrage , j'ai une grande valeur (de l'ordre du MegaNewton) presque tout le temps. même quand je suis simplement en orbite.    

ensuite quand je touche le sol, selon l'accélération les valeurs sont très différentes.

et même sans accélération je n'arrive pas à trouver des valeurs interessantes.

et puis quel serait le seuil pour un crash. combien de Newton est capable de supporter la carlingue d'un vaisseau.

quand au docking là c'est pire encore. quand je me docke la valeur passe tout simplement à zero même si je suis arrivé comme un bourrin.

help me

Dan tu as bien sur résolu le problème dans ton DGIV


---------------------------------------------

PC en rade, codage en panne.... Nom de Zeus

Offline florentin

  • Full Member
  • ***
  • Posts: 93
  • Karma: 2
Reply #1 - 01 March 2011, 09:22:08


je suis désolé de répondre aussi tard, mais je me suis enfin rendu compte que quelqu'un avait le même problme que moi. essai cela :

Code: [Select]
static VECTOR3 spd = {0};
if(GroundContact()&&spd.y < -6)
destroy_vessel();
GetHorizonAirspeedVector(spd);

chez moi cela permet de detruire un vaisseau quand il percute le sol.
tu peut essayer la même chose avec la vitesse relative lors du docking.



Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #2 - 03 March 2011, 00:16:13
Plutôt dans ce sens :
Code: [Select]
static VECTOR3 spd = {0};

GetHorizonAirspeedVector(spd);

if(GroundContact()&&spd.y < -6)
destroy_vessel();

:)



Offline pilote334

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 5
Reply #3 - 10 March 2011, 19:54:57
Pour répondre à la vitesse d'impact : tu peux utiliser comme seuil la valeur de 600 ft/minutes ce qui correspond à une vitesse verticale de 3 m/s !

Pour ton exemple, tu peux établir la chose suivante :

G=9.81 m/s²

Autrement dit et en arrondissant, tu peux établir que sur Terre, pour obtenir la valeur de 3 m/s, la hauteur de chute ne doit pas dépasser...3 mètres, facile à retenir, non ? Cette chute durera 0,3 seconde.

Sur une trajectoire oblique, il faut que tu fasse des calculs vectoriels pour avoir les deux composantes qui composent ta force principale : une composante horizontale (correspondant à ta vitesse sol sans vent) et une composante verticale qui t'interresse directement pour ton seuil de crashes.

Yves



Offline tofitouf

  • Legend
  • ******
  • Posts: 1380
  • Karma: 0
Reply #4 - 12 March 2011, 14:53:49
merci pour vos reponses, j'ai bien testé ces solutions mais il m'arrive que GroundContact soit toujours à false, surtout dans les cas où on arrive à une vitesse de dingue. et c'est justement dans ces cas là qu'il me faut tester :)

je continue mes ptites recherches


---------------------------------------------

PC en rade, codage en panne.... Nom de Zeus

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #5 - 12 March 2011, 15:40:40
Avec l'altitude, peut-être ?

Par exemple, tu prend l'altitude à chaque frame. Puis, un if (altitude < 3), GetSpeed() ou une fonction du genre. Si la vitesse est trop grande... BADABOUM ! C'est moins précis, mais ça laisse un jeu (quelques mètres) pour mesurer la vitesse, et pas besoin d'avoir un GroundContact.


Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline florentin

  • Full Member
  • ***
  • Posts: 93
  • Karma: 2
Reply #6 - 13 March 2011, 14:28:02
ce code ci ne marche pas a tout les coups,

Code: [Select]
static VECTOR3 spd = {0};

GetHorizonAirspeedVector(spd);

if(GroundContact()&&spd.y &lt; -6)
destroy_vessel();

en effet, lorsque le vaisseau touche le sol, la vitesse verticale devient immediatement nulle, il ne peut donc pas y avoir GroundContact()  et spd.y < -6 en même temps.

il faut tester la vitesse verticale de la frame précécante, d'ou le "static", la variable spd n'est pas détruite, elle reprend la valeur qu'on lui a donné à la fin de la dernière frame.

Code: [Select]
static VECTOR3 spd = {0};
if(GroundContact()&&spd.y < -6)
destroy_vessel();
GetHorizonAirspeedVector(spd);

florentin

« Last Edit: 13 March 2011, 14:28:02 by florentin »