Page 41 sur 52

Re: Pour discuter de mathématique

Posté : jeudi 9 août 2018 à 19:24
par Siobhan
Bubu a écrit :Connaissez-vous les coordonnées homogènes ?
En 3D, on définit un point selon 3 dimensions x, y et z. (Coordonnées cartésiennes)
Pas pour les coordonnées homogènes, il y a un quatrième membre, w.
En fait w est un diviseur. On divise les 3 coordonnées cartésiennes x y et z par w.

C'est le système de coordonnées utilisé en infographie 3D. (développeurs)
Cela permet de gérer les perspectives.
Dans un espace projeté en perspective, plus un objet est loin, et plus il se rapproche du centre et rapetisse.
Sinon on fixe w à 1. Pas de déformation. Et on est dans le cas des coordonnées cartésiennes.
Et on fixe w à zéro pour les normales des surfaces. Ce sont des vecteurs.

C'est pourquoi on utilise des matrices 4x4 en infographie 3D. Alors que les points sont définis sur 3 dimensions.
De toute façon, rien qu'à cause des translations, il faudrait des matrices 4*3.

Les gpus font la division par w automatiquement quand on précise la matrice de projection.

Merci bubu, je ne savais pas :) .

Re: Pour discuter de mathématique

Posté : samedi 11 août 2018 à 18:09
par Bubu
J'insiste sans doute beaucoup c'est clair. :|
Ce qui est génial avec les transformations géométriques qui utilisent les matrices,
c'est qu'on peut concaténer les matrices (abusif), en fait on les multiplient entre elles.
Et on obtient finalement une seule matrice qui contient toutes les transformations.

Par exemple on a un objet 3D, un ensemble de faces (des triangles) dans son repère local.
D'abord on le met à l’échelle (on l'agrandit ou on le reduit)
En suite on le positionne en angle (3 rotations appliquées selon les 3 axes, ou bien seulement grâce à un quaternion transformé en matrice)
Ensuite on le translate. Pour qu'il soit à la bonne place.

Ensuite on fait un changement de repère, pour que l'origine de la vue soit celle de l'écran.
On transforme la scène par l'inverse de la matrice qui code le point de visée, la caméra.

Ensuite on applique la projection. Ça transforme le view frustum en cube unitaire.
Tout est déformé par la perspective. (Après il y a plusieurs formes de perspectives, je parle pour les jeux)

Et cela avec une seule transformation linéaire.
Mais cette transformation linéaire est propre à chaque objet. (appelé Entité dans un moteur).

[edit] le produit des matrices n'est pas commutatif. Contrairement aux nombres connus. 3x2 = 2x3. Mais ce n'est pas vrai pour les matrices.
Si A et B sont des matrices, AxB et BxA seront différentes sauf exceptions.
C'est facile de l'imaginer avec les endomorphismes que j'ai utilisés au début : Si on décale et qu'on tourne un objet, on obtient pas le même résultat si je tourne d'abord et que je décale ensuite.

Re: Pour discuter de mathématique

Posté : samedi 11 août 2018 à 20:37
par Tugdual
Récemment passée sur Arte, cette conférence de Cédric Villani :
Spoiler :  : 

Re: Pour discuter de mathématique

Posté : mardi 14 août 2018 à 15:30
par hazufel
Quatre émissions sur Alan Turing sur France Culture. Depuis hier, la suite jeudi et vendredi.
l’énigmatique Alan Turing

Re: Pour discuter de mathématique

Posté : mercredi 15 août 2018 à 10:19
par Tugdual
En complément à ci-dessus :

Re: Pour discuter de mathématique

Posté : mercredi 15 août 2018 à 15:47
par Bubu
(Point de vue d'un développeur qui utilise les matrices en infographie 3D.)

Pour revenir sur la multiplication des matrices :
C'est un concept emprunté aux nombres. En fait c'est une analogie avec les nombres mais qui n'a rien à voir.
Mais qui a ses limites, l'ordre de la multiplication compte. Le résultat change. Le produit des matrices n'est pas commutatif.
C'est une représentation de la composition d'applications affines.
Multiplier 2 matrices, ça correspond en traduisant à composer deux fonctions affines. Dans notre cas deux opérations géométriques. A les enchaîner.

Les matrices ce sont des tableaux de nombres (scalaires) en deux dimensions. Des tableaux à deux entrées.
La multiplication n'est pas triviale. En bref, il faut que le nombre de colonnes de la première soit égal au nombre de lignes de la deuxième. (Sinon la multiplication est impossible).
Le résultat est une matrice, tableau à deux entrées qui a le nombre de lignes de la première et le nombre de colonnes de la deuxième.
L'addition et la soustraction entre matrices est beaucoup plus simple, cela se fait membre à membre.
Et on peut définir l'inverse d'une matrice (comme si on divisait une matrice par une autre), mais ce n'est pas trivial non plus. Si le déterminant n'est pas nul, on peut utiliser les comatrices ou des opérations par pivot. Bref.
L'inversion de matrice est très importante en infographie 3D, notamment pour les changements de repère.

Les matrices codent deux choses : des bases (des repères), et des transformations linéaires( rotations, translations, changements d'échelle, etc).
(Je n'ai jamais compris que c'était la même chose, excusez mon niveau).

Concrètement, on utilise les matrices seulement pour les transformations. (Que des matrices 4x4)
Les tableaux de vertices (les points) d'un objet ne sont pas considérés comme des matrices, c'est juste que l'on applique à la chaîne une transformation sur chacun des points.

Après vient la cuisine des shaders dans le GPU, des programmes qui positionnent les points grâce à ces matrices (les vertex shaders) et d'autres programmes qui colorisent le pixel(les fragments/pixels shaders).

Re: Pour discuter de mathématique

Posté : mercredi 15 août 2018 à 15:59
par freeshost
Ah ! L'algèbre linéaire ! :mrgreen:

Re: Pour discuter de mathématique

Posté : mercredi 15 août 2018 à 16:19
par Bubu
freeshost a écrit : mercredi 15 août 2018 à 15:59 Ah ! L'algèbre linéaire ! :mrgreen:
Hellow !
Pour l'algèbre linéaire, il faut passer par les matrices, c'est indispensable.
Pour le plus direct, l'addition et la soustraction se font membre à membre sur des matrices de même taille. Si elles n'ont pas la même taille ça n'a aucun sens.
C'est utilisé intensément pour l'animation des skin-meshes : des personnages qui avancent courent, ... Pour les interpolations pondérées de positions de points.
Ça permet de déformer les faces de l'objet pendant l'animation.

L'inversion te permet de changer de repère.
Par exemple, tu as ta scène, entre (-100, -100) et (+100, +100)
Or la camera est à (25, 75). Comment rendre la scène depuis ce point de vue ? (Je n'ai pas mentionné le fait qu'en plus de la position, il faut donner l'orientation de la caméra, 3 vecteurs).
C'est là que l'algèbre linéaire est très utile : on applique l'inverse de cette matrice de la caméra :
Et on se retrouve avec une scène affichée selon la vue de la caméra.

Je ne parle pas de la multiplication des matrices et de la production de l'inverse d'une matrice, mais si ça t’intéresse, je fournirai des documents.

Re: Pour discuter de mathématique

Posté : mercredi 15 août 2018 à 16:32
par freeshost
Ah ! Mais j'avais appris à effectuer le produit matriciel et à trouver l'inverse d'une matrice carrée (quand celui-ci existe).

Par contre, je n'ai pas appris les applications de l'algèbre linéaire à l'informatique. Je suppose qu'il doit y en avoir pas mal.

Re: Pour discuter de mathématique

Posté : mercredi 15 août 2018 à 16:57
par Bubu
freeshost a écrit : mercredi 15 août 2018 à 16:32 Ah ! Mais j'avais appris à effectuer le produit matriciel et à trouver l'inverse d'une matrice carrée (quand celui-ci existe).

Par contre, je n'ai pas appris les applications de l'algèbre linéaire à l'informatique. Je suppose qu'il doit y en avoir pas mal.
Salut freeshost !
(Il faut mettre des parenthèses a la place de mes traits droits qui erronément veulent dire déterminant)
Tu va être rassuré il y en que 4 types !
__________________________________________________________________________________________________________________
La mise à l’échelle : (scaling)
|a 0 0 0|
|0 b 0 0|
|0 0 c 0|
|0 0 0 1|
(Où a est le dimensionnement en x, b le dimensionnement en y et c le dimensionnement en z)


__________________________________________________________________________________________________________________
La translation (positionnement de l'objet dans la scène)
|1 0 0 0|
|0 1 0 0|
|0 0 1 0|
|x y z 1|

(Où x est la translation en x, y la translation en y, et z la translation en z)

__________________________________________________________________________________________________________________
La rotation :
Je ne peux pas l'exprimer. Le plus simple et le plus sûr, c'est de transformer un quaternion en matrice.
(Avec les 3 angles, il y a le risque des cardans qui se coincent. Faut utiliser les quaternions)

__________________________________________________________________________________________________________________
La (une) projection (perspective) :

|1 0 0 0|
|0 1 0 0|
|0 0 1 1/f|
|0 0 0 1|

Où f est la distance par rapport à l'origine.

(Il y a deux autres types de projections)

J'ai corrigé. L'idée c'est de diviser par f toutes les coordonnées.

Après c'est propre à la 3D. Pour la perspective avec point de fuite à l'infini au centre.
Pour la 2D, on utilise, en gros, que l'identité comme matrice de projection.
La coordonnée Z est ignorée en 2D, tout simplement.

Re: Pour discuter de mathématique

Posté : jeudi 6 septembre 2018 à 17:10
par EnHans
Bonjour,
Peut-on appeler différemment un segment ru que [ru] ou [ur] ?

Re: Pour discuter de mathématique

Posté : jeudi 6 septembre 2018 à 22:54
par freeshost
Oui, il s'agit d'un segment. C'est un ensemble de points alignés entre deux points. Un ensemble est comme un sac. Peu importe comment sont ordonnés ses éléments, peu importe si tu le secoues (comme au loto), ça reste le même ensemble.

Par contre, le vecteur -UR-> est différent du vecteur -RU->. À vrai dire, c'est son opposé. Un vecteur est une sorte de mouvement rectiligne de longueur finie.

Re: Pour discuter de mathématique

Posté : jeudi 6 septembre 2018 à 23:03
par Bubu
mikkel a écrit : jeudi 6 septembre 2018 à 17:10 Bonjour,
Peut-on appeler différemment un segment ru que [ru] ou [ur] ?
Non. Il n'a pas d'ordre.
Pour les segments.
Tu peux exprimer leur longueur (la distance entre les points) en utilisant Pythagore.
longeur = racine carré de ((u.x - r.x) ² + (u.y - r.y)²)

[RU] ou [UR] c'est pareil. (Représentés avec un trait en haut)
Par contre comme l'a très justement précisé FH, si on parle de vecteurs c'est autre chose.

Et le symbole n'est pas le même. On met une flèche au lieu d'un trait.
Les vecteur symbolisent un mouvement une direction pondérée par leur norme (leur longueur), alors que les segments symbolisent une distance.
Un vecteur n'a pas de position. Un segment, si. (On a deux points positionnés dans le repère)

Je vais peut-être un peu loin, mais en général, on s’intéresse aux vecteurs normalisés (sinon, ils amplifient les vecteurs avec lesquels on les manipule).
Un vecteur normalisé, c'est un vecteur de norme 1. Cela veut dire qu'il a une longueur de 1. En infographie c'est très important.
Ça permet en gros de faire le calcul correctement de la luminosité sur chaque pixel.
J'extrapole :
Une surface à 90 degré de la lumière ne reçoit aucune lumière.(C'est le cosinus de l'angle qui compte)
Une surface parfaitement en face de la lumière (parallèle), recevra toute la lumière.

Re: Pour discuter de mathématique

Posté : vendredi 7 septembre 2018 à 9:06
par 2N3055
Voir la syntaxe utilisée dans les fichiers
manipulés par les scripts dans les pages web intégrant des fichiers SVG

http://debeissat.nicolas.free.fr/svg3d.php

et celle des fichiers utilisés par Blender
https://www.youtube.com/watch?v=AIQl5OLMURo

=======
À l'époque, c'était une vrai galère,
mais maintenant, tous les navigateurs web
interprètent correctement les fichiers au format SVG.

=======
Pour les profs, ce serait un excellent support pédagogique.

Re: Pour discuter de mathématique

Posté : vendredi 7 septembre 2018 à 14:00
par Ixy
A propos une superbe librairie javascript pour modifier les svg c'est https://d3js.org/ d3 js. Vous pouvez voir les exemples sur le site il y a des trucs géniaux !