IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Existence d'une classe vector 2d/3d ?


Sujet :

C++

  1. #1
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut Existence d'une classe vector 2d/3d ?
    Bien le bonjour,

    Savez-vous s'il existe en standard ou dans boost une classe de vecteur 2D / 3D qui implémente toutes les méthodes qui vont bien ? genre +, -, *scalaire, produit vectoriel, produit scalaire, norme, <, ==, = ...

    Avouez que ce serait dommage de réécrire la roue une énième fois.

    Vous avez ça en stock ?

  2. #2
    Membre éclairé Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Par défaut
    Justement, je suis en train de développer cela, une petite lib de maths mais ca c'est la base après je rajoute ma touche avec des fonctions pour calculer les aires, les périmètres...

    Mais en toute honnêteté, je dirai que Vector2D/3D (pour les produits scalaires...) ca doit exister mais où ?

    Pour ce n'est pas réinventer la roue car il y a des choses qui vont êtres dans ma lib qui n'existent pas vraiment (pê car c'est peu utilisé )

  3. #3
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Il me semble qu'il n'y a pas d'objet dans le genre dans boost, mais il me semble aussi qu'il y a une lib concernant la géometrie... ou seulement des calculs liés.

  4. #4
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    J'ai bien vu boost::numeric::ublas::vector<T>, mais ça manque de fonctionnalités

  5. #5
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Ben c'est surtout que c'est pas fait pour. C'est pour du calcul matriciel général, et pas pour des trucs spécifiques comme les jeux vidéos.

  6. #6
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    Citation Envoyé par HanLee Voir le message
    Ben c'est surtout que c'est pas fait pour. C'est pour du calcul matriciel général, et pas pour des trucs spécifiques comme les jeux vidéos.
    J'entends bien. N'y a-t-il donc rien en standard qu'on doive réécrire/récupérer une classe externe ? Comme beaucoup de monde j'en ai une sous la main, mais j'aurais espéré pouvoir utiliser quelque chose d'un peu standard.

  7. #7
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Il me semble qu'il y en a une (bibliothèque) en particulier qui est pas mal utilisée dans les moteurs 2D/3D, quelque chose comme Math Magic ou quelque chose comme ça. Le problème c'est que je ne retrouve pas le nom exact.
    Les classes 2D/3D/Quaternion de Ogre en sont largement inspirés (voir copiés à la base).

  8. #8
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Tu peux regarder du côté de CGAL sinon, c'est un biblio spécialisé pour les algorithmes géométriques.

  9. #9
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    On ne va pas aller jusque là. S'il n'y a rien en standard ou en boost, je vais me prendre une petite classe tierce.

  10. #10
    Membre éclairé
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Par défaut
    Je suis en train d'en écrire une moi-même (cf. mes posts sur les templates), mais il existe GLM (glm.g-truc.net) qui me semble très correcte.
    Sinon, DirectX/D3D possède des propres types pour l'algèbre linéaire.

  11. #11
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    En même temps, c'est pas mal quand tu veux taper un peu du niveau supérieur en 3D, genre la décimation ou la subdivision de maillages, t'as des structures de données compliquées déjà implémentées.

  12. #12
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    oui, si on tape dans les biblios externes on trouve forcément

  13. #13
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    En général ces classes sont si "classiques" à programmer, que tout le monde les a forcément déjà dans un coin... un petit coup de refactoring pour le mettre à la sauce du projet et basta.

    Maintenant, chaque projet peut avoir ses spécificités...
    Par exemple, un moteur de jeu préfèrera avoir des structures simples de float, des fonctions rapides dessus genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    template<type T,int size> T* vector_add(T* pdst, const T* psrc1, const T* psrc2);
    template<type T,int size> T* vector_add_smult(T* pdst, const T* psrc1, const T* psrc2, T src2scalar);
    template<type T,int size> T* vector_smult_add(T* pdst, const T* psrc1, T src1scalar, const T* psrc2);
    template<type T,int size> T* vector_smult_add_smult(T* pdst, const T* psrc1, T src1scalar, const T* psrc2, T src2scalar);
    template<type T,int size> T* vector_sub(T* pdst, const T* psrc1, const T* psrc2);
    template<type T,int size> T* vector_sub_smult(T* pdst, const T* psrc1, const T* psrc2, T src2scalar);
    template<type T,int size> T* vector_smult_sub(T* pdst, const T* psrc1, T src1scalar, const T* psrc2);
    template<type T,int size> T* vector_smult_sub_smult(T* pdst, const T* psrc1, T src1scalar, const T* psrc2, T src2scalar);
    template<type T, int size> T vector_sprod(const T* psrc1, const T* psrc2);
    template<type T, int size> T* vector_vprod(T* pdst, const T* psrc1, const T* psrc2);
    ...
    Et des classes qui wrappent tout ça pour la "beauté", la compréhension du code, et surtout éviter les bugs

    Il y a beaucoup de fonctions "matricielles" en commun entre:
    Vector3D, Point3D, Point3D_rhw, ou Quaternion....
    Mais sémantiquement (au niveau classes C++ donc), ce sont des concepts bien différents et qui doivent être séparés. Et on peut faire dériver Quaternion d'une classe de OrthoNormalTransform sans sourcilier... Mais pas de Vector4D !

    Prenons un autre exemple: il y a pour moi une différence entre "Tangeant3D" et "Normal3D"... Les deux héritent de Vector3D... et pourtant.... l'application d'une transformation 3D dans un cas sera directe, dans l'autre cas, c'est l'inverse de la transformation qui sera appliquée.

Discussions similaires

  1. Echec du test de l'existance d'une classe
    Par vinzzzz dans le forum Général Java
    Réponses: 3
    Dernier message: 08/07/2009, 09h25
  2. Exercice : création d'une classe vector std-like
    Par Goten dans le forum Débuter
    Réponses: 17
    Dernier message: 08/12/2008, 17h54
  3. Réponses: 23
    Dernier message: 11/11/2007, 20h01
  4. Une classe vector sans STD?
    Par dedesite dans le forum C++
    Réponses: 7
    Dernier message: 31/05/2006, 17h04
  5. Référence à un objet existant depuis une classe
    Par Adrenalys dans le forum ASP
    Réponses: 2
    Dernier message: 21/07/2005, 00h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo