Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » Addition de vecteurs en polaire (15 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
LionelA Ecrit le: Mardi 14 septembre 2004 à 18:08 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


Salut,
Voila pour le "moteur physique" de f-zero, j'ai besoin d'additionner des vecteurs definis comme ceci (cf un topic y'a longtemps) :

typedef struct Vect
{
  short dir;
  short norm;
}Vect;


Voila la fonction que j'ai faite qui permet de le faire :

void vectAdd (Vect * v1, Vect * v2, Vect * v3)
{
  short dir1, dir2, norm1, norm2;

  if (v1->norm || v2->norm)
  {
    if (v1->norm == 0)
    {
      v3->dir = v2->dir;
      v3->norm = v2->norm;
      return;
    }
    if (v2->norm == 0)
    {
      v3->dir = v1->dir;
      v3->norm = v1->norm;
      return;
    }
    if (((v1->dir + (NBDIR/2)) %NBDIR) == v2->dir)
    {
      if (v1->norm < v2->norm)
      {
        v3->dir = v2->dir;
        v3->norm = v2->norm - v1->norm;
      }
      else
      {
        v3->dir = v1->dir;
        v3->norm = v1->norm - v2->norm;
      }
    }
  
    if (v1->dir < v2->dir)
    {
      dir1 = v1->dir;
      norm1 = v1->norm;
      dir2 = v2->dir;
      norm2 = v2->norm;
    }
    else
    {
      dir1 = v2->dir;
      norm1 = v2->norm;
      dir2 = v1->dir;    
      norm2 = v1->norm;
    }
    if (((dir1 + NBDIR) - dir2) < (dir2 - dir1))
      dir1 += NBDIR;

    v3->dir = (dir1 * norm1 + dir2 * norm2)/(norm1 + norm2);
    v3->norm = CosTable[(dir1 - dir2 + NBDIR) % NBDIR] * (norm1 + norm2);
  }  
}


Elle additionne v1 et v2 et retourne le resultat dans v3
CosTable est un tableau contenant les valeurs de cosinus et de taille NBDIR (mais tout le monde l'avait compris n'est-ce pas :D ?)
Ce que je voudrais savoir c'est si elle est juste à 100% (la prouver) car elle semble marcher mais rien ne me dit qu'elle est réellement juste.

Vous en pensez quoi ?
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°1   Marquer comme non lu.
Kevin Kofler Ecrit le: Mardi 14 septembre 2004 à 19:05 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Bon:
if (v1->norm || v2->norm)

Et qu'est-ce qui se passe si les 2 sont le vecteur nul? Ça sent le résultat non initialisé...

if (v1->norm == 0)
{
v3->dir = v2->dir;
v3->norm = v2->norm;
return;
}

0+v=v. OK.

if (v2->norm == 0)
{
v3->dir = v1->dir;
v3->norm = v1->norm;
return;
}

v+0=v. OK.

Donc maintenant les 2 sont non nuls.

if (((v1->dir + (NBDIR/2)) %NBDIR) == v2->dir)
{
if (v1->norm < v2->norm)
{
v3->dir = v2->dir;
v3->norm = v2->norm - v1->norm;
}
else
{
v3->dir = v1->dir;
v3->norm = v1->norm - v2->norm;
}
}

Directions opposées. OK.

Donc maintenant, on a un angle saillant. Reste à savoir lequel, et effectivement:

if (v1->dir < v2->dir)
{
dir1 = v1->dir;
norm1 = v1->norm;
dir2 = v2->dir;
norm2 = v2->norm;
}
else
{
dir1 = v2->dir;
norm1 = v2->norm;
dir2 = v1->dir;
norm2 = v1->norm;
}
if (((dir1 + NBDIR) - dir2) < (dir2 - dir1))
dir1 += NBDIR;

Voilà. Là, on a notre angle saillant.

v3->dir = (dir1 * norm1 + dir2 * norm2)/(norm1 + norm2);

Faux. Contre-exemple: (1<30°)+(2<45°) donne un angle de 40,0128°, pas 40°. Et il y a certainement des cas où c'est encore moins précis.

v3->norm = CosTable[(dir1 - dir2 + NBDIR) % NBDIR] * (norm1 + norm2);

Faux. Même contre-exemple. Avec ton code, on aurait 2,898, la bonne valeur est 2,977.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°2   Marquer comme non lu.
Kevin Kofler Ecrit le: Mardi 14 septembre 2004 à 19:07 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


La bonne méthode d'additionner des vecteurs en polaire est de les transformer en cartésiennes, d'additionner, puis de les retransformer en polaire. Cela implique aussi que la représentation polaire n'est pas un bon choix si tu veux faire des additions.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°3   Marquer comme non lu.
Thor Ecrit le: Mardi 14 septembre 2004 à 19:12 Déconnecté(e)    Voir le profil de Thor Envoyer un email à Thor Visiter le site WEB de Thor Envoyer un message privé à Thor  


Oui pourquoi as tu besoin d'une représentation polaire #confus# Les coordonnées cartésiennes sont tout de même plus simple! Tu peux même utiliser les complexes!
Cyril MOTTIER aka {==Thor==}
Modérateur général du forum de Tigen
[Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
    
./Post n°4   Marquer comme non lu.
LionelA Ecrit le: Mardi 14 septembre 2004 à 19:15 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


N'y a t'il pas moyen de s'en sortir sans passer par les coordonnées cartesiennes (c'était mon but au départ) car pour les conversions on a besoin de la fonction sqrt et atan (je crois)
Si il y a juste une erreur sur la fin que dois-je faire pour la corriger ?
Pour le cas ou les 2 vecteurs sont nuls, ok je vais corriger ca :p
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°5   Marquer comme non lu.
LionelA Ecrit le: Mardi 14 septembre 2004 à 20:00 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


Thor> Ben c'est simple, dans mon "moteur physique" (si on peut appeler ca comme ça), je veux representer des forces, 3 forces sont appliquées a chaque vaisseau :
- l'inertie qu'il a accumulé
- la poussée des reacteurs
- une force exterieure quelconque (addition des forces de collision contre la bordure, les collisions avec les autres vaisseaux et de la force générée par une side attack)

La poussée est intégré a la force d'inertie.
Les vaisseaux translatent selon la direction de inertie et ils sont orientés dans sa direction s'il n'y a pas de dérapage.
ils translatent aussi selon extForce.

Les normes des forces de chaque vaisseau diminue a chaque passage dans la fonction qui calcule la nouvelle position.

Avec des vecteurs en cartesien ca serait bien plus ch**nt à gerer je pense.

Pour ce qui est de la précision NBDIR est égal a 128 donc je ne pense pas être au 10eme de degré près, mais j'aimerais bien savoir si on peut faire comme j'ai fais pour additionner des coordonnées polaires :)
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°6   Marquer comme non lu.
Thor Ecrit le: Mardi 14 septembre 2004 à 20:16 Déconnecté(e)    Voir le profil de Thor Envoyer un email à Thor Visiter le site WEB de Thor Envoyer un message privé à Thor  


Oui je comprend mieux maintenant!
Cyril MOTTIER aka {==Thor==}
Modérateur général du forum de Tigen
[Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
    
./Post n°7   Marquer comme non lu.
Kevin Kofler Ecrit le: Mardi 14 septembre 2004 à 20:44 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Ce que tu fais additionne approximativement des vecteurs polaires. Maintenant, il faut voir si l'approximation te suffit. L'erreur peut être catastrophique dans le pire des cas en tout cas, et si tu fais beaucoup d'additions de la sorte, l'erreur va s'accumuler même si elle était petite au départ.
-Edité le Mardi 14 septembre 2004 à 20:44 par Kevin Kofler-
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°8   Marquer comme non lu.
LionelA Ecrit le: Mardi 14 septembre 2004 à 21:09 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


OK c'est bon alors car la precision n'est pas ma priorité (qui est plutot la rapidité d'execution)
Merci pour ces reponses :)
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°9   Marquer comme non lu.
Benjy Ecrit le: Mardi 14 septembre 2004 à 22:09 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


Dit tu nous prepare quoi lionel???
Le langage C y'a pas mieux!!!
    
./Post n°10   Marquer comme non lu.
LionelA Ecrit le: Mardi 14 septembre 2004 à 22:16 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


Mais rien du tout voyons :D

Un F-Zero ?

Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°11   Marquer comme non lu.
geogeo Ecrit le: Mercredi 15 septembre 2004 à 11:55 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Benjy est un peu dans le paté en ce moment :D
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°12   Marquer comme non lu.
Thor Ecrit le: Mercredi 15 septembre 2004 à 13:27 Déconnecté(e)    Voir le profil de Thor Envoyer un email à Thor Visiter le site WEB de Thor Envoyer un message privé à Thor  


Lionel tu es sûr que les coordonnées en polaire soit les plus rapides en calculs?
Cyril MOTTIER aka {==Thor==}
Modérateur général du forum de Tigen
[Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
    
./Post n°13   Marquer comme non lu.
LionelA Ecrit le: Mercredi 15 septembre 2004 à 13:40 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


J'en suis persuadé dans mon cas, vu que je me sert de l'addition qu'assez rarement par rapport a l'utilisation directe de la norme et de la direction
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°14   Marquer comme non lu.
Benjy Ecrit le: Jeudi 16 septembre 2004 à 06:55 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


Non mais serieux c'est vrai que j'ai plu beaucoup de temps en ce moment!! Mais dit nous ce que tu prepare lol!!
Le langage C y'a pas mieux!!!
    
./Post n°15   Marquer comme non lu.
LionelA Ecrit le: Jeudi 16 septembre 2004 à 07:06 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


Réponse en blanc dans le post n°10
Réponse en clair dans le post n°0
:p
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
  :: Index » Forum Ti68K » Programmation C » Addition de vecteurs en polaire (15 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 79.67ms avec 18 requetes