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: Mes questions sur VC++ 2005  (Read 23811 times)

0 Members and 1 Guest are viewing this topic.

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #50 - 06 August 2010, 01:03:16
Allô !

J'ai encore un problème. Je veux compiler ma DLL en Release afin de tester si ça marche, et ce n'est pas le cas. J'ai un indicateur de fuel avec une bande créé par GDI. Cette bande change de couleur dépendament comment il reste de fuel. En Debug, ça marche impec. En Release, lorsque la couleur est jaune, il m'affiche un drôle de dessin. J'ai testé en changeant de couleur mais ça ne change rien. Puisque l'erreur n'est pas dans mon code mais certainement dans les options du Release, j'ai cherché et j'ai trouvé ce qui fait boguer. C'est l'optimisation. Dès que je la met sur Désactiver, j'ai mon joli jaune. Par contre, dès que je l'active (avec Augmenter la vitesse, Réduire la taille ou Optimisation complète), ça redevient laid.

Je peux très bien laisser l'optimisation désactivé mais si c'est le cas, je perdrai de la performance et ma DLL sera plus grosse. Donc, j'aimerais bien laisser l'optimisation mais mettre mon joli jaune. Voilà des screens/exemples :

En mode Debug ou sans optimisation :

Avec optimisation :


Là où je déclare mes brushs (premier est le vert, deuxième le jaune et troisième le rouge. Regarder les brushs, pas les fonts) :
Code: [Select]
DLLCLBK void InitModule (HINSTANCE hModule)
{
g_Param.hDLL = hModule;
// Allocate GDI ressources
g_Param.hFont[0] = CreateFont (-10, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, "Arial");
g_Param.hFont[1] = CreateFont (10, 6, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 0, "Arial");
g_Param.hBrush[0] = CreateSolidBrush (RGB(0,128,0));
g_Param.hBrush[1] = CreateSolidBrush (RGB(128,128,0));
g_Param.hBrush[2] = CreateSolidBrush (RGB(128,0,0));
}

Un exemple de mon utilisation :
Code: [Select]
CENSURÉ

color = (sliderpos_fuelRCS < 50 ? 1:0);
if (sliderpos_fuelRCS < 25) color = 2;
HDC hDC = oapiGetDC(surf);
RECT rct = {0, 0, (int)sliderpos_fuelRCS, 7};
FillRect(hDC, &rct, g_Param.hBrush[color]);
oapiReleaseDC(surf, hDC);

CENSURÉ



Message modifié ( 06-08-2010 01:04 )

Émile

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

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #51 - 06 August 2010, 04:19:09
Etrange , en effet , et ta démonstration ( ton code ) est limpide .
Le problème est trés bien exposé aussi !:applause:
Ce qui me vient à l'esprit , c'est l'utilisation de la macro RGB qui est en réalité une routine .
Serait-il possible que cette routine aie un comportement différent selon les options de compilation .
Il faudrait l'éditer en faisant clic droit " aller à la déclaration " et voir s'il n'y a pas des #infdef ou #ifdef
qui sont activés suite à une directive du préprocesseur , déclarée dans la liste des optimisations.
Auquel cas , tu peux conserver le mode optimisation en retirant la définition qui pose problème et conservant les autres . Trés intérressant ... pour mieux comprendre le compilateur et son fonctionnement , et réussir à en tirer le
meilleur .
C'est du "TUNING" de code !!
3...2...1...:top:

Exemple ( Site du zéro) :
Code: [Select]
Tenez-vous bien : il est possible de réaliser des conditions en langage préprocesseur
Voici comment cela fonctionne :

Code : C - Sélectionner
1
2
3
4
5
#if condition
    /* Code source à compiler si la condition est vraie */
#elif condition2
    /* Sinon` si la condition 2 est vraie` compiler ce code source */
#endif

A ta place , je commencerais par vérifier cette hypothèse , qui ne néccéssite pas de changement de code .
(puisqu'il fonctionne bien en debug ... )
A+ bibi !
;)



Message modifié ( 06-08-2010 04:33 )

Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #52 - 06 August 2010, 15:29:41
Non, pas de directive de préprocesseur dans la définition de RGB dans wingdi.h :sad:. Mais en y pensant, si c'était un #ifdef ou autre, toutes mes couleurs n'auraient pas fonctionnées ? Là, c'est seulement la deuxième couleur que je déclare qui bogue. Le premier et troisième sont impec. Je vais essayé avec PALETTEINDEX au lieu de RGB. J'éditerai quand j'aurais fait ça.

EDIT :

PALETTEINDEX ne marche pas... :sad:



Message modifié ( 06-08-2010 15:38 )

Émile

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

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #53 - 06 August 2010, 18:33:02
salut !
 
As-tu éssayé de donner les valeurs de couleurs en  Héxadécimal ?
Sinon , quand des surprises colorées apparaissent avec gdi , c'est souvant à cause de flags définissant le mode de dessin.
ex : dans la fonction bitblit , PATCPY, SRCCPY,IMAGEINVERT etc ...

Mais je ne vois pas comment l'optimisation vient agir de cette manière ici .

Sinon , je pensais à un truc hier ( rien à voir ) :
Spoiler  :
Ce serait sympa d'introduire une animation du panneau 2D genre " secousses " , liées à l'allumage des moteurs par
exemple . Je ne sais pas si quelqu'un l'a déjà fait , auquel cas ce serait une première .
A toi l'honneur ...



Message modifié ( 06-08-2010 19:16 )

Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #54 - 06 August 2010, 19:56:16
Les valeurs de couleurs en héxadécimales, c'est le code HTML ? Ex : ffff00 ? Si c'est le cas, je l'ai déjà essayé avec le PALETTEINDEX.

Pour les flags, ils seraient où ? Dans mon code ? De toute façon, s'il y en avait, ils auraient affectés les autres couleurs, non ?

Pour l'idée du panel, il y a beaucoup de restriction. Premièrement, je ne peux pas le secouer car je n'ai pas le contrôle de la position du panel. Orbiter le centre toujours. La seule chose que je pourrais faire, c'est bouger la vue de l'intérieur comme le DG-IV le fait lors d'accélération au sol. Par contre, faire ça dans l'espace, ça ne paraîtera pas beaucoup (faut pas oublier que Sentinel est un vaisseau interplanétaire incapable d'alunir. Comme le Discovery One de 2001).


Émile

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

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #55 - 06 August 2010, 20:22:14
Quote
Pour les flags, ils seraient où ? Dans mon code ? De toute façon, s'il y en avait, ils auraient affectés les autres couleurs, non ?

J'ai l'impréssion qu'il s'agit d'un problème de mélange de couleurs .
Je tatonne ...
Essaie d'utiliser des couleurs primaires ( 0,255,0 à la place de 128 ) .
 
Quote
J'ai testé en changeant de couleur mais ça ne change rien
Ah .... bon .
Editer le fichier d'options serait utile aussi ( je sais pas faire encore ...)



Message modifié ( 06-08-2010 20:25 )

Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #56 - 07 August 2010, 21:10:05
Je crois devenir :fou:. J'ai honte de moi. J'ai été tellement con de ne pas avoir remarqué ça.

J'avais déclaré 1 seule brush au lieu de 3.

Tout de même, je me demande pourquoi ça fontionnait en Debug :wonder:. Aussi, pourquoi le rouge était dessiné ? Je n'avais qu'une seule brush de déclarée :???:.

Maintenant, ça marche impec.

:merci: MrSpock pour ton aide


Émile

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

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #57 - 07 August 2010, 22:05:12
Ouf ... C'est moi qui commençait à avoir honte , de réfléchir en vain !
C'est super que tu aies réussi à régler ton problème , quel qu'il soit !
De mon coté , je progresse en programmation de MFD ...
A+


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #58 - 04 September 2010, 20:25:13
Et je ressort ce post !

Ma question est en rapport avec Orbiter et la physique en général. Je voudrais indiquer le nombre de kN généré par mes thrusters.

J'ai regardé dans l'API_Reference et voilà ce que Martin écrit :
Quote
To obtain the actual force [N] generated by the thruster in vacuum, multiply
the thrust level with its maximum thrust rating. However, the thrust force in
the presence of ambient atmospheric pressure may be lower if
SetThrustPressureDependency has been applied.

Je comprend et j'exécute (en prenant soin de diviser par 1000 car je le veux en kN et non en N tout court). À plein régime, j'ai 193 kN. Pourtant, j'ai les mêmes settings que le ShuttleA (je changerai un jour ;)) et sur le ShuttleA, il marque 1064 kN !

J'ai regardé les sources et je trouve un peu bizarre ce qu'il fait.

Martin prend le level avec GetThrusterLevel(), le multiplie par son MAX_MAIN_THRUST qui est de 193520 (comme moi). Ça c'est ce que j'ai fait et Martin aussi. Ensuite, il multiplie le tout par 1e-3 :???:. Je ne sais pas où il a pris ça ni pourquoi il fait ça. Any suggestion ?

:help:


Émile

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

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #59 - 04 September 2010, 23:00:33
Salut BiBi !
Quote
J'ai regardé les sources et je trouve un peu bizarre ce qu'il fait.
Tu parles de l'exemple dans le SDK du ShuttleA ?
Si oui , je regarderais en passant .
Mais tu auras certainement trouvé la réponse avant !
A vos méninges !
:beer:


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #60 - 05 September 2010, 03:26:44
Oui, c'est dans l'exemple du ShuttleA.

Je peux indiquer n'importe quelles valeurs mais laquelle utilisée (version API_Reference ou version ShuttleA) ? Je veux quand même quelque chose de précis, pas un nombre fichu au hasard.

:merci: Spocky (c'est ton nouveau surnom :badsmile: ). Juste offrir ton aide est un bonheur pour moi. :)



Message modifié ( 05-09-2010 03:27 )

Émile

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

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #61 - 05 September 2010, 04:36:52
Quote
Je peux indiquer n'importe quelles valeurs mais laquelle utilisée (version API_Reference ou version ShuttleA) ? Je veux quand même quelque chose de précis, pas un nombre fichu au hasard.

Compris !
Je regarde cela de plus prés demain : Spocky va se reposer un peu .
J'ai une galère mathématique moi aussi , dans mon projet ...
Alors ... :friend:

Edith : " J'ai pas pu m'empecher de regarder ..."
J'ai trouvé cette fonction : tu parles de celle là aussi ? :
Ah mince ! C'est le SDK 2010...
Code: [Select]
// --------------------------------------------------------------
bool ShuttleA::RedrawPanel_EngineIndicator (SURFHANDLE surf)
{
...

for (i = 0; i < 2; i++) {
level = GetThrusterLevel (th_main[i]);
th    = level*GetThrusterMax (th_main[i]);

angle = level * (1.5*PI);
dx = rad*cos(angle), dy = rad*sin(angle);
MoveToEx (hDC, cntx[i], cnty[0], NULL);
LineTo (hDC, cntx[i]-(int)dx, cnty[0]-(int)dy);
sprintf (cbuf, "%0.0f", th*1e-3);
TextOut (hDC, txtx[i], txty0a, cbuf, strlen(cbuf));
sprintf (cbuf, "%0.1f", th/m);
TextOut (hDC, txtx[i], txty0b, cbuf, strlen (cbuf));


Tu disais aussi :
Quote
Martin prend le level avec GetThrusterLevel(), le multiplie par son MAX_MAIN_THRUST qui est de 193520 (comme moi).

Mais moi , je trouve dans ShuttleA.h :
Code: [Select]
const double MAX_MAIN_THRUST = 2128720.0/2.0;
// Main engine thrust [N] per engine

Et avec çà un extrait de la doc SDK2010

Code: [Select]
double VESSEL::GetThrusterMax  ( THRUSTER_HANDLE  th   )  const

Returns the current maximum thrust rating of a thruster.


Parameters:
 th  thruster handle  

Returns:
Max. thrust rating a the current atmospheric pressure [N].
Note:
If a pressure-dependent Isp rating has been defined for the thruster, and if the vessel is moving through a planetary atmosphere
, this method returns the maximum thrust rating given the current atmospheric pressure.
Otherwise it returns the maximum vacuum thrust rating of the thruster
.


ISP selon WIKI :http://fr.wikipedia.org/wiki/Propulsion_spatiale
Quote
Afin de pouvoir classer et comparer les différents types de propulsion, un critère de performance a été établi : l'impulsion spécifique. Il est défini par :
Isp=F/m*g0
où F est la poussée fournie par la propulsion,  le débit de matière éjectée et g0 l'accélération due au champ de gravité, supposé constant à proximité de la surface d'une planète.

CONCLUSION DU MOMENT :
LES RESULTATS VARIENT SELON QUE TU ES EN SITUATION ATMOSPHERIQUE OU PAS .
Nous en reparlerons tout à l'heure ...
;)



Message modifié ( 05-09-2010 05:52 )

Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #62 - 06 September 2010, 20:44:41
Quote
MrSpock a écrit:
Edith : " J'ai pas pu m'empecher de regarder ..."
J'ai trouvé cette fonction : tu parles de celle là aussi ? :
Ah mince ! C'est le SDK 2010...
Code: [Select]
// --------------------------------------------------------------
bool ShuttleA::RedrawPanel_EngineIndicator (SURFHANDLE surf)
{
...

for (i = 0; i < 2; i++) {
level = GetThrusterLevel (th_main[i]);
th    = level*GetThrusterMax (th_main[i]);

angle = level * (1.5*PI);
dx = rad*cos(angle), dy = rad*sin(angle);
MoveToEx (hDC, cntx[i], cnty[0], NULL);
LineTo (hDC, cntx[i]-(int)dx, cnty[0]-(int)dy);
sprintf (cbuf, "%0.0f", [glow=yellow,2,300]th*1e-3[/glow]);
TextOut (hDC, txtx[i], txty0a, cbuf, strlen(cbuf));
sprintf (cbuf, "%0.1f", th/m);
TextOut (hDC, txtx[i], txty0b, cbuf, strlen (cbuf));
[/i]

Tu disais aussi :
Oui c'est bien de celle-là que je parlais. Par contre, tu as oublié la partie que j'ai mise en jaune.
Quote
Quote
Martin prend le level avec GetThrusterLevel(), le multiplie par son MAX_MAIN_THRUST qui est de 193520 (comme moi).
Mais moi , je trouve dans ShuttleA.h :
Code: [Select]
const double MAX_MAIN_THRUST = 2128720.0/2.0;
// Main engine thrust [N] per engine
Martin a changé la puissance ? weird...
Quote
Et avec çà un extrait de la doc SDK2010

Code: [Select]
double VESSEL::GetThrusterMax  ( THRUSTER_HANDLE  th   )  const

Returns the current maximum thrust rating of a thruster.


Parameters:
 th  thruster handle  

Returns:
Max. thrust rating a the current atmospheric pressure [N].
Note:
[b]If[/b]a pressure-dependent Isp rating [b]has been defined [/b]for the thruster, and if the vessel is moving through a planetary atmosphere, this method returns the maximum thrust rating given the current atmospheric pressure.
Otherwise it returns the maximum vacuum thrust rating of the thruster
.
Moi, mon vaisseau ne prend pas en compte l'atmosphère car je n'ai pas fait de SetThrustPressureDependency. Aussi, j'utilise plutôt la méthode GetThrusterLevel() car la puissance maximum, je la sait. C'est moi qui l'a mise.
Quote
ISP selon WIKI :http://fr.wikipedia.org/wiki/Propulsion_spatiale
Quote
Afin de pouvoir classer et comparer les différents types de propulsion, un critère de performance a été établi : l'impulsion spécifique. Il est défini par :
Isp=F/m*g0
où F est la poussée fournie par la propulsion,  le débit de matière éjectée et g0 l'accélération due au champ de gravité, supposé constant à proximité de la surface d'une planète.
CONCLUSION DU MOMENT :
LES RESULTATS VARIENT SELON QUE TU ES EN SITUATION ATMOSPHERIQUE OU PAS .
Nous en reparlerons tout à l'heure ...
;)



Message modifié ( 06-09-2010 20:48 )

Émile

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

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #63 - 07 September 2010, 00:15:45
Quote
Oui c'est bien de celle-là que je parlais. Par contre, tu as oublié la partie que j'ai mise en jaune.
Oublié ? Tu es trop aimable !
En fait , je ne l'avais même pas remarquée !
:badsmile:

Je comprends mieux ta question ...
Et je n'ai pas la réponse .
RE :badsmile:

Quote
sprintf (cbuf, "%0.0f", th*1e-3);
ou ie-3 est l'ISP ? :wonder:

Peut-être devrais-tu déjà envisager de modéliser de A à Z ta propulsion ( plutôt que de mélanger différentes sources ), même si il existe peu ( aucune ?) de références sur les réacteurs atomiques destinés à l'espace .
Mais ce doit être possible de tirer des conclusions par rapport à des tests faits en laboratoire ...
Encore faut-il les trouver sur le NET .
Ton projet est bien interressant !
Si j'ai du nouveau , je t'en ferais part .
A+
;)



Message modifié ( 07-09-2010 00:19 )

Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #64 - 07 September 2010, 00:34:32
Oui, je créerai ma propre définitions des moteurs ( d'ailleurs, Alexandre a tout calculé ça pour moi :badsmile: ). Mais ma question de base reste toujours : Comment calculer les kN créés par mes thrusters ? Quelle est la formule à partir d'un pourcentage (GetThrusterLevel()), d'une puissance maximum et autre ?


Émile

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

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #65 - 07 September 2010, 00:46:04
Quote
d'ailleurs, Alexandre a tout calculé ça pour moi
Ben demande lui alors ! :badsmile:

Si tu connais ta puissance en Newtons quand ton level =100 , tu fais un simple produit en croix.
Quote
WIKI :La règle de trois ou règle de proportionnalité est une méthode mathématique permettant de déterminer l'un des termes d'un tableau de proportionnalité à partir des autres.
 Elle peut aussi être utilisée pour vérifier qu'un tableau de valeurs satisfait une relation de proportionnalité.
Cette règle repose sur l'égalité des produits en croix, qui sont les produits des termes de chaque diagonale dans un tableau de proportionnalité à deux lignes et deux colonnes.
http://fr.wikipedia.org/wiki/R%C3%A8gle_de_trois
Exemple :

100 % = 200000 N
x %         = resultat

Ce qui donne resultat= (x*200000)/100 .
Résultat qui ne tient pas compte de l'ISP ...
:badsmile:



Message modifié ( 07-09-2010 01:01 )

Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #66 - 07 September 2010, 01:44:32
:doubt: La règle de 3. Pourquoi n'y ais-je pas penser plus tôt. Donc, le 1e-3 était bel et bien l'ISP du ShuttleA
La programation rend :fou:

:merci: Spocky !


Émile

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

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #67 - 07 September 2010, 02:02:30
Avec joie BiBi !
En Canadien-Vulcain :
Spoiler  :
iou areu wèlecomme !
:beer:


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #68 - 09 September 2010, 06:02:42
Salut BiBi U !
J'ai trouvé un site super concernant le C++ .
Une référence en ligne , des exemples de code , ++ ...
http://www.cplusplus.com/
A+



Message modifié ( 09-09-2010 06:03 )

Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #69 - 10 September 2010, 00:17:10
Et un autre favori !
:merci: du tuyau !


Émile

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

- Luc Plamondon

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #70 - 25 September 2010, 16:16:07
Et je ressort ce fil pour une nouvelle question.

J'essais de jettisonner 2 modules depuis un gros. Je fais disparaître mes 2 meshes, puis je copie. Voilà un extrait (ultra commenté pour vous :badsmile: ) :
Code: [Select]
VESSELSTATUS vs;
GetStatus(vs); // prend le status du vaisseau mère
Local2Rel (_V(-1.65*2, 0, 2.75), vs.rpos); // positionne le vaisseau fille à la bonne position, en utilisant les coordonnées du vaisseau mère
vs.vrot.y += 0.25; // Ajoute une rotation lors de la séparation
vs.rvel.x += 20; // Ajoute de la vitesse lors de la séparation afin d'avoir une distance sécuritaire
oapiCreateVessel (" Test1", "Test", vs); //crée le vaisseau

Ça fonctionne, mais pas comme je veux. La rotation est correct car le vaisseau est crée relativement au vaisseau. Donc, l'axe de rotation est le même que le vaisseau. Par contre, pour le vecteur d'éloignement, l'axe est relatif à la planète de référence. Donc, selon comment mon vaisseau mère est orienté, le vecteur va changer d'orientation par rapport à mon vaisseau mère.

En gros, j'aimerais savoir comment créer un vecteur de déplacement relativement à mon vaisseau.



Message modifié ( 25-09-2010 16:17 )

Émile

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

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #71 - 25 September 2010, 18:29:37
Salut Bibi !
( zoli code ! )
En gros ... http://cnx.org/content/m13603/latest/
Bonne réflexion !
:)


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #72 - 25 September 2010, 18:50:23
Je n'ai que 14 ans et dans le système d'éducation québécois, on n'a pas encore vu les sinus, cosinus et tangente. Même le théorème de Pythagore est encore méconnue de la plupart de mon âge ! Donc, le site que tu m'as donné, je comprend pas trop... :trucdeouf:

Il n'y aurait pas une solution avec des fonctions comme Local2Rel() ou Local2Global() ?


Émile

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

- Luc Plamondon

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #73 - 25 September 2010, 19:14:55

Je sais que tu as 14 ans , mais cela n'a rien à voir avec ta capacité à comprendre .
J'avais commencé une longue explication , mais je me suis dit que te montrer l'ennemi , c'était un bon moyen
pour que tu le considères avec respect .
Ennemi ?
" L"homme est esclave de ce qui le domine " .
Les sciences nous dominent tant que nous ne les comprenons pas .

Ma connaissance est limitée , c'est ce qui fait que je ne peux te donner une réponse simple et évidente .
Quote
Il n'y aurait pas une solution avec des fonctions comme Local2Rel() ou Local2Global() ?
Ces deux fonctions utilisent les opérations de vecteur pour transposer une position dans un repère Orthonormé
A vers B .

Elles servent donc à POSITIONNER , non pas à ORIENTER .
Je n'ai pas le SDK sur mon pc actuel , mais tu trouveras des fonctions UTILES concernant les opérations sur vecteurs .
Je te conseille donc d'étudier ( encore... ) une heure ou deux ce que sont les Vecteurs et quelles sont leurs propriétés.
Je vais faire de même de mon coté , et nous retrouvons plus tard pour faire un bilan ?

Les lois existent , nous pouvons les utiliser sans les comprendre , selon les cas .
Car les lois sont des outils , et un marteau n'est pas un tournevis .
Tout problème a sa solution en son temps .
D'abord l'analyse , la recherche , puis l'application .
Ou l'application , la recherche de ce qui ne vas pas , l'analyse de la situation , la création de règles ( qui existaient déjà !).


Ce n'est pas un problème de C++ , c'est de la logique physique qui se résout avec des outils mathématiques .
Trouve le problème , et l'outil pour le régler.
En fait , c'est ce que tu demandes , un outil !
Je vais voir dans ma caisse ...
A tout à l'heure .
:music:


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #74 - 25 September 2010, 19:44:29
Remoi : Après l'introduction, en gros , entrons dans le vif du sujet ( Jacky , t'aurais pas un scalpel et un clamp ? :badsmile:) .

Les fonctions auxquelles tu penses font partie de la procédure en ce sens où elles servent à initialiser des variables
qui seront traitées dans un pipeline de transformation .

L'Api d'Orbiter fournit une trousse à outils comme une mallette de chirurgien ( c'est comme çà qu'on dit ?  :bebe: ).

Voici la page l'exposant :


Code: [Select]
Vectors and matrices

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

Detailed Description
Vectors and matrices are used to represent positions, velocities, translations, rotations, etc. in the 3-dimensional object space. Orbiter provides the VECTOR3 and MATRIX3 structures for 3-D vectors and matrices. A number of utility functions allow common operations such as matrix-vector products, dot and vector products, etc.
 


Classes
union   VECTOR3
  3-element vector More...
 
union   MATRIX3
  3x3-element matrix More...
 


Functions
VECTOR3  _V (double x, double y, double z)
  Vector composition.
 
void  veccpy (VECTOR3 &a, const VECTOR3 &b)
  Vector copy.
 
VECTOR3  operator+ (const VECTOR3 &a, const VECTOR3 &b)
  Vector addition.
 
VECTOR3  operator- (const VECTOR3 &a, const VECTOR3 &b)
  Vector subtraction.
 
VECTOR3  operator * (const VECTOR3 &a, const double f)
  Multiplication of vector with scalar.
 
VECTOR3  operator/ (const VECTOR3 &a, const double f)
  Division of vector by a scalar.
 
VECTOR3 &  operator+= (VECTOR3 &a, const VECTOR3 &b)
  Vector addition-assignment a += b.
 
VECTOR3 &  operator-= (VECTOR3 &a, const VECTOR3 &b)
  Vector subtraction-assignment a -= b.
 
VECTOR3 &  operator *= (VECTOR3 &a, const double f)
  Vector-scalar multiplication-assignment a *= f.
 
VECTOR3 &  operator/= (VECTOR3 &a, const double f)
  Vector-scalar division-assignment a /= f.
 
VECTOR3  operator- (const VECTOR3 &a)
  Vector unary minus -a.
 
double  dotp (const VECTOR3 &a, const VECTOR3 &b)
  Scalar (inner, dot) product of two vectors.
 
VECTOR3  crossp (const VECTOR3 &a, const VECTOR3 &b)
  Vector (cross) product of two vectors.
 
double  length (const VECTOR3 &a)
  Length (L2-norm) of a vector.
 
double  dist (const VECTOR3 &a, const VECTOR3 &b)
  Distance between two points.
 
void  normalise (VECTOR3 &a)
  Normalise a vector.
 
VECTOR3  unit (const VECTOR3 &a)
  Returns normalised vector.
 
MATRIX3  _M (double m11, double m12, double m13, double m21, double m22, double m23, double m31, double m32, double m33)
  Matrix composition.
 
MATRIX3  identity ()
  Returns the identity matrix.
 
MATRIX3  outerp (const VECTOR3 &a, const VECTOR3 &b)
  Outer product of two vectors.
 
MATRIX3  operator+ (const MATRIX3 &A, double s)
  Sum of matrix and scalar.
 
MATRIX3  operator- (const MATRIX3 &A, double s)
  Difference of matrix and scalar.
 
MATRIX3  operator * (const MATRIX3 &A, double s)
  Product of matrix and scalar.
 
MATRIX3  operator/ (const MATRIX3 &A, double s)
  Quotient of matrix and scalar.
 
MATRIX3 &  operator *= (MATRIX3 &A, double s)
  Matrix-scalar product-assignment A *= s.
 
MATRIX3 &  operator/= (MATRIX3 &A, double s)
  Matrix-scalar division-assignment A /= s.
 
VECTOR3  mul (const MATRIX3 &A, const VECTOR3 &b)
  Matrix-vector multiplication.
 
VECTOR3  tmul (const MATRIX3 &A, const VECTOR3 &b)
  Matrix transpose-vector multiplication.
 
MATRIX3  mul (const MATRIX3 &A, const MATRIX3 &B)
  Matrix-matrix multiplication.
 

Toues ces fonctions sont des outils , inutilisables si nous ne savons pas Opérer ( mwah ah aha ah le momo ! ) .
La différence entre un boucher et un chirurgien c'est ...
:wonder:

J'espère ne pas trop t'éxaspérer ... Québecquois !
:lol:


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos