| |||||
| Dernière réponse | |
|---|---|
| Sujet : [Maths] Interpolation dans l'espace | |
| tgrx | BENB> le probleme c'est que j'ai 82 variables :sarcastic: c'est un peu lourd d'imposer des conditions aux limites pour chacune.
:hello: (reponse tardive) Bon en tout cas pour moi c'est fini... :wahoo:, le programme fonctionne, le rapport est a chier (comme d'hab). Pour ceux que ca interesse (comment ca personne :sweat: ), j'ai tout mis la : http://prekipik.free.fr A bientot sur HFR... :jap: [edtdd]--Message édité par tgrx--[/edtdd] |
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| tgrx | BENB> le probleme c'est que j'ai 82 variables :sarcastic: c'est un peu lourd d'imposer des conditions aux limites pour chacune.
:hello: (reponse tardive) Bon en tout cas pour moi c'est fini... :wahoo:, le programme fonctionne, le rapport est a chier (comme d'hab). Pour ceux que ca interesse (comment ca personne :sweat: ), j'ai tout mis la : http://prekipik.free.fr A bientot sur HFR... :jap: [edtdd]--Message édité par tgrx--[/edtdd] |
| BENB | Pour tes problemes aux frontieres il faut que tu vois avec ceux qui on fait le code de calcul...
Pour des vitesses : vitesse nulle a la paroi Pour des Temperature : voir avec eux Temp de la paroi ou alors temperature d'une cellule imaginaire symetrique de la tienne par rapport a la paroi... etc... |
| tgrx | AYAI ! C'est fait.
Bon alors en fait j'en ai un peut chie, mais ca marche correctement maintenant. Mon probleme majeur etait que je perdais du volume sur les frontieres en passant au nouveau systeme de maillage (je passe d'un volume de dimension I*J*K a un volume de dimension (I-1)*(J-1)*(K-1)). La solution que j'ai trouve a ete de rajouter des cellules a la frontiere, mais ces cellules sont planes, ou reduites a un point dans les coins. Comme ca le volume reste le meme, et maintenant ma nouvelle grille couvre exactement le meme volume. Ensuite j'ai tres legerement modifie mon algo pour trouver les coordonnees d'un point a l'interieur d'une cellule, maintenant je tiens compte egalement de la surface des parois de la cellule lorsque je fais la moyenne de mes coefficients, sinon dans certains cas de cellules vraiment deformees, ca sortait de l'intervalle [0,1]. Et donc screenshot a suivre, ca commence a devenir assez joli cette histoire... :) |
| tgrx |
|
| BENB | Pour le systeme barycentrique, le mieux pour le rendu (pas pour le temps de calul) c'est d'utiliser TOUTS les points :D
sinon tu peux utiliser des coefs comme 3 pour la maille courante, puis 2 pour les mailles adjacentes, 1 pour les mailles a une maille de distance, puis 0 pour les autres... ou revenir sur des truc comme 1/d2 ou 1/d3 pour diminuer les influences des points distants. Sinon tu peux construire ton systeme trilineaire sur les centres des voxels, comme ca plus de baycentres... Je suis consciente que cette derniere modif n'est pas evidente |
| tgrx | Les systemes barycentriques tous seuls etaient bof, parce que pour avoir un bon resultat final il faut tenir compte d'un grand nombre de points, sinon on a des bons resultats *localement*, et les raccords sont degueulasses (saut de valeurs a la frontiere des cellules).
Donc c'est pour ca que j'ai mixe avec du trilineaire pour avoir qq chose de plus joli, et en meme temps j'utilise le 1/d sur les points des sommets. C'est un compromis... les resultats sont pas mauvais. Un exemple en couleur : http://prekipik.free.fr/color.gif . Mais je crois que je vais essayer aussi une deuxieme methode : toujours en 1/d pour trouver mes sommets, puis en 1/d encore a l'interieur de chaque cellule par rapport aux 8 sommets. Je pense que ca va donner de meilleurs resultats que du 1/d direct... |
| BENB | Plus exactement sur les termes mathematiques...
A propos pourquoi tu as elimine les systemes entierment barycentriques (en 1/d ou 1/d2) ? Eux devait te donner le contraste que tu voulais ? peut-etre etaient ils trop lents ? |
| tgrx | Arf tu joues sur les mots....
Sous entendu que mes points ont pour coordonnees (0,0,0),(0,0,1)...,(1,1,1)... et que donc dans ce cas (DH,DA,DC) n'est pas une base car l'application qui transforme les points (0,0,0),(0,0,1)...,(1,1,1) en mon volume n'est pas lineaire. baaaaaaaaaah :p:p:p |
| BENB | Si, si (DH,DA,DC?) est bien une base, mais elle n'est pas othogononale, le pb est plus de trouver les coordonnes de BFGE... :D |
| tgrx | UP |
| tgrx | Bon alors, voici la grille initiale, cylindrique encore une fois (mais ce n'est qu'un exemple... :p)...
http://prekipik.free.fr/grid2.gif C'est un segment de tuyau dans lequel il y a du liquide et du gaz. En projection directe voici le resultat : http://prekipik.free.fr/project.gif On dirait des vagues a la surface, mais en fait non, c'est uniquement du aux cellules qui ne sont pas horizontales, et donc ca fait des creux et des bosses... on dirait des vagues, mais malheureusement c'est parfaitement calme dans le tuyau. Avec l'interpolation trilineaire (que je viens d'expliquer) : http://prekipik.free.fr/trilin.gif C'est hallucinant, je ne m'attendais pas a ca ! A partir d'une grille foireuse, pas assez detaillee (regardez la taille des voxels sur l'image d'en haut), ce fichu algorithme arrive a me recreer une surface parfaitement plane... Ah c'est mon boss qui va etre content. Je tiens a remercier tous ceux qui m'ont aide, BENB, janoscoder, et minusplus.... :hello: [edit]--Message édité par tgrx--[/edit] |
| tgrx | Bon finalement j'en suis venu a bout... j'ai opte pour une interpolation trilineaire, au niveau contraste c'est pas genial, mais le resultat est bon, et le lissage des courbes est parfait.
Le truc c'est que bien sur une interpolation trilineaire c'est facile, mais seulement dans les cubes. Ex : http://astronomy.swin.edu.au/pbour [...] trilinear/ Seulement moi j'ai des cellules qui ressemblent a ca. Desole pour la tete du truc j'ai pas eu le temps de trouver l'outil qui trace les lignes... :D http://prekipik.free.fr/cell.gif L'idee c'est de trouver les coordonnees relatives d'un point quelconque dans la cellule. Pour ca il faut trouver une transformation affine entre le cube initial et la cellule. Par exemple pour trouver la coordonnee suivant l'axe x, il faut faire coulisser (de maniere affine) le plan ABCD vers le plan EFGH, et s'arreter des que le point M recherche appartient au plan coulisse. On en deduit la coordonnee en faisant par exemple le rapport AI/AE, ou I est l'intersection du plan coulisse avec le segment AE. Soit P le plan coulisse de coordonnee x. Si I,J,K,L sont les intersections de ce plan avec AE,BF,DH et CG, on a : AI= x.AE BJ= x.BF DK= x.DH CL= x.CG Et une condition necessaire et suffisante d'appartenance de M au plan coulisse est : (IJ^IK).IM = 0 (un produit mixte tout bete) ce qui conduit a une equation du troisieme degre en x, penible a resoudre (j'ai pas retrouve la formule sur le net, donc ca veut dire faire du newton sur [0,1] pour trouver la racine... :sarcastic: ). Mais c'est toujours mieux que d'inverser une matrice 8x8. L'inconvenient est qu'il faut recalculer les quadrinomes du 3e degre pour chaque point M de la cellule. ... Donc voici la solution que j'ai utilisee : Je considere les vecteurs (DH,DA,DE) comme une base de la cellule (ce qui n'est vrai QUE si elle est parallelepipedique), et je trouve les coordonnees de M dans cette base. Je fais de meme avec les 7 autres bases possibles (relatives aux 7 autres sommets), et ensuite je fais la moyenne de tous ces coefficients... et ca fonctionne plutot pas mal, a ma grande surprise... je dirais meme qu'on est tres pres de la valeur theorique. Avantage de la methode : ca fait 8 matrices 3x3 a inverser par cellule, ce qui est assez leger, et ensuite on utilise ces matrices pour tous les points de la cellule... Et niveau vitesse ca va quasiment aussi vite que la bete projection sans interpolation... http://forum.hardware.fr/sqlforum/icones/icon16.gif Donc moi je dis oui. Et donc ensuite je trouve la valeur du point M en faisant une interpolation lineaire classique, comme si j'etais dans un cube, avec les coefficients trouves. Reste un dernier point, trouver les valeurs aux 8 sommets. Et bien pour chaque sommet, je trouve les 8 cellules (au plus) auquel il appartient, et je fais une barycentration inversement proportionnelle aux distances du sommet par rapport aux centres de ces cellules (avec ta fonction de saturation BENB, comme ca on ne jette rien de ce qui a ete dit dans ce post ;) ). Dernier detail : pour trouver la valeur d'un point dans la cellule, je ne tiens pas compte de la valeur de cette derniere. En fait si, puisqu'elle est prise en compte indirectement dans la valeur des sommets, mais bon... je sais pas si ca joue. En tout cas les resultats ont l'air corrects. A suivre : des images du resultat... :sol: [edit]--Message édité par tgrx--[/edit] |
| BENB | Up du soir |




