Contenu | Rechercher | Menus

Annonce

La nouvelle clé USB Ubuntu-fr est en prévente
Rendez-vous sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/01/2019, à 16:55

Destroyers

[C++] Librairie de gestion d'unités, problème de dimensions angulaires

Bonjour,

Je suis en tain de coder une bibliothèque permettant de manipuler des unités physiques. (Pour ceux qui me disent que cela existe déjà, je leur répond que ma lib est header only, qu'elle permet de définir "facilement" de nouvelles unités simplement avec des typedefs, qu'elle est compatible avec std::chrono::duration, et surtout qu'elle propage les incertitudes dans les opérateurs wink , (et d'autres broutilles). Voilà entre autres ce qui la différencie des libs déjà existantes)

Je possède une classe template Unit, dont l'un des paramètres template est une Dimension. Dimension est elle même une classe template prenant 9 paramètres non-type de type int. Les 7 premiers représentent les sept unités de base, et les deux dernières représentent l'angle et l'angle solide. Par exemple une longueur a une dimension de type Dimension<1,0,0,0,0,0,0,0,0>, une masse Dimension<0,1,0,0,0,0,0,0,0,0>, un volume Dimension<3,0,0,0,0,0,0,0,0>, une vitesse Dimension<1,0,-1,0,0,0,0,0,0>, etc etc...

Mon problème ici concerne les deux derniers paramètres de la classe Dimension. Sont ils pertinents ? Je pense que oui car sans l'angle solide, impossible de représenter un lumen (1 lm = 1 cd.str). Mais la présence des angles peut aussi poser problèmes. Par exemple lors du calcul de la puissance d'une voiture. P = RC (régime*couple). Le régime étant en tour/s, il faudrait que le couple soit en N.m/tour pour que le produit final donne effectivement une puissance, ce qui est absolument contre intuitif pour le user.

Voyez le problème, si je ne représente pas les angles comme des dimensions, ils me manquent, mais si je les représente, je peux avoir un surplus d'informations. Que feriez vous ?

Merci beaucoup

Hors ligne

#2 Le 14/01/2019, à 17:29

Nasman

Re : [C++] Librairie de gestion d'unités, problème de dimensions angulaires

Comment gères tu l'utilisation l'utilisation des unités hors SI ? Par exemple une vitesse en MPH au lieu de m/s ?
Pour les angles peux tu gérer les degrés (360 pour un tour), les grades (400 pour un tour), les radiants (2Pi pour un tour) ?
Pour les stéradiants, 4Pi pour la sphère complète.
Une vitesse angulaire sera exprimée en s-1 ou en rd/s

Une force est exprimée en kg.m.s-2 (N)
Un couple en kg.m2.s-2
Une vitesse angulaire en s-1

La puissance est donc en kg.m2.s-3 (W)


PC fixe sous Bionic 64 bits et portable avec Xenial 64 bits

Hors ligne

#3 Le 15/01/2019, à 14:23

Destroyers

Re : [C++] Librairie de gestion d'unités, problème de dimensions angulaires

Bonjour,

Merci pour la réponse.

Pour un peu plus de détails, la classe unit possède 4 arguments template. Voici sa définition:

template<typename _Dimension, typename Rep, typename Period, double const& Origin>
class Basic_Unit;

où _Dimension est le type Dimension décrit au premier post, Rep est le type priminif avec lequel est représentée la valeur stockée en interne, Period est un type Ratio<num, den> représentant justement quel est l'ordre de grandeur de l'unité (1/1 pour l'unité de base du SI, 1/1000 pour un millimètre, 1 609 344/1000 pour un mile impérial... pour un angle, ça serait 1/1 pour le radian, 62 832/10 000 pour un tour, etc...), et Origin représente la valeur à l'origine, par exemple 273.15 pour le celsius.

Mais quoi qu'il arrive la question n'est pas la, ma question n'est relative qu'aux dimensions, pas aux unités. Je me demande si la présence des angles en tant que dimensions est pertinente. Comme je l'ai soulevé dans le premier post, le lumen est un candela.steradians, dire que le lumen et le candela ont exactement la même dimension me paraît bizarre. Mais du coups, si on considère les angles comme des dimensions, alors une vitesse angulaire est un rad/s, mais là aussi ça pose des problèmes...

Dernière modification par Destroyers (Le 15/01/2019, à 14:28)

Hors ligne

#4 Le 15/01/2019, à 14:30

Nasman

Re : [C++] Librairie de gestion d'unités, problème de dimensions angulaires

Un angle est une donnée sans dimension. Comme le rapport entre une circonférence de cercle et un rayon (rapport 2Pi) ou entre un quart de cercle et ce même rayon (Pi/2)


PC fixe sous Bionic 64 bits et portable avec Xenial 64 bits

Hors ligne

#5 Le 15/01/2019, à 15:45

Destroyers

Re : [C++] Librairie de gestion d'unités, problème de dimensions angulaires

Ok je vais donc simplement les retirer et représenter le lumen avec la même dimension que le candela. ça me paraît OK.
Merci.

Hors ligne