module inscription newsletter haut de page forum mobile

Rejeter la notice

formations etalonnage sur davinci resolve

Nos Formations Etalonnage avec Forest reviennent en octobre !
Adoptez une réelle méthodologie d'étalonnage professionnelle et atteignez vos objectifs créatifs avec nos formations intensives sur 3 jours
Toutes les infos
Rejeter la notice

ateliers live resolve avec forest

Ateliers Live Resolve - Formez-vous en ligne tous les mois avec Forest !
Faites rapidement évoluer la qualité de vos étalonnage avec nos ateliers mensuels de 3h.
Toutes les infos
Rejeter la notice

Formation Lumière - Pratique Intensive du 14 au 16 octobre à Paris
Formez-vous avec cet atelier de pratique intensive dans des conditions exceptionnelles ! Formation finançable.
Toutes les infos

Ateliers et Formations

Problème mathématique

Discussion dans 'Effets spéciaux visuels' créé par Julien W., 28 Juillet 2005.

  1. Julien W.

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    1 499
    Appréciations:
    +0 / 0 / -0
    Bonjour à tous!

    Je me pose une question depuis un bout de temps et, comme je ne sais pas trop où la poser, je la pose ici, bien que j'avoue que c'est un peu hors sujet.
    La question est sûrement stupide. Cependant, pour une raison qui m'échappe, je n'arrive pas à trouver une réponse qui me satisfait.

    Donc voilà mon problème... je vous explique un peu le contexte qui peut paraître à premier abord assez compliqué, mais, comme vous le verrez, la question reste assez basique.

    [​IMG]

    Ce disque représente un système de coordonnées polaires (saturation, teinte). Chaque point sur le disque est déterminé par sa teinte ainsi que pas sa saturation.

    Deux rectangles sont dessinés, l'un étant délimité par les saturations A0, A1 et les teintes alpha0, alpha1, l'autre étant délimité par les saturations B0, B1 et les teintes beta0, beta1. On va les apeller les rectangles A et B - il ne s'agit effectivement pas de rectangles, mais par un simple changement de coordonnées ils en deviennent, n'oubliez pas qu'un ours polaire devient un ours cartésien à la suite d'un changement de coordonnées adéquat ;). Le rectangle A contient le rectangle B. Le rectangle B délimite la zone rouge, le rectangle A la zone blanche (et rouge). Le reste est bleu.

    Il y a 10 zones délimitées par les droites et les cercles de séparation.

    Ce qui m'intéresse c'est de connaître le pourcentage de rose et de bleu pour les points se trouvant dans la zone blanche, pour que la zone blanche soit remplacée par un dégradé linéaire passant du rose au bleu.

    Pour les zones 3 et 4, le pourcentage de distance distance accompli entre le rose et un point est déterminée à partir de la saturation de ce point, C: d(C). Par une simple règle de trois, pour la zone 3, par exemple:
    D = B0 - A0 = 100%
    d' = C - A0 = ?%
    -> d(C) = d' * 100 / D
    Ce n'est vraiment pas sorcier.

    Pour les zones 5 et 6, le problème est le même. Sauf qu'à la place d'utiliser la saturation, on utilise la teinte.

    Par contre, mon problème se pose avec les zones 7, 8, 9 et 10, où d(C, gamma).
    d' est calculé à partir du théorème de Pythagore (d(C) et d(gamma) étant les cathètes). Le problème, c'est que je ne sais pas comment déterminer le pourcentage de la distance accomplie à partir du rose. D (l'équivalent du 100%) n'est pas constant.

    Pour l'instant, la solution que j'ai trouvé est de séparer le problème en deux parties: lorsque le point est d'un côté de la diagonale, on calcule la distance avec C, et quand il est de l'autre côté de la diagonale, on calcule la distance avec gamma.

    [​IMG]

    Je ne pense pas qu'il s'agit de la meilleur solution. Quelqu'un en voit-il une autre?

    Le problème avec ma solution, c'est que le point 1 et le point 2 auront la même valeur, alors que le point 2 et plus loin du rose que le point 1.


    EDIT: Je n'ai pas été très clair, désolé. Je connais la bonne solution. Elle consiste à utiliser des quarts de cercles. Mais cela impliquerait que le rectangle A ait ses coins arrondis. J'aimerais éviter cela. Ce que je cherche est une solution intermédiaire. Qui n'est pas exacte, mais mieux que celle que j'ai actuellement. Le problème étant, vous l'avez deviné, de diminuer au minimum le nombres d'opérations à effectuer.
     
  2. oscarus

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    477
    Appréciations:
    +0 / 0 / -0
    Salut Julien,

    voila la solution que je te propose pour la zone 7, pour les autres zones (8,9 et 10) il suffira de procéder par analogie :

    d(C) = (C-A0)/(B0-A0)*(gamma-alpha0)/(beta0-alpha0)*100
     
  3. Julien W.

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    1 499
    Appréciations:
    +0 / 0 / -0
    Merci pour ta solution oscarus. Il faut la soustraire à 100 pour avoir la distance par rapport au rose.
    Cependant, la transition entre deux domaines n'est malheureusement plus continue - sauf erreur. Un point qui se trouverait sur un des bords (avec C-A0 = 0 ou gamma-alpha0 = 0) aura une distance du bleu de 0 (de 100% du rose), indépendamment de l'autre différence (non nulle).
     
  4. oscarus

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    477
    Appréciations:
    +0 / 0 / -0
    Au contraire, cela permet d'avoir un effet continu sur les bords !
    Mais après tout, je n'ai peut-être pas très bien compris ce que tu voulais.
    Allez, bonnes vacances à tous ! :D
     
  5. 7am

    7am

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    118
    Appréciations:
    +0 / 0 / -0
    Une autre proposition, mais ton cercle est trop complexe, j'ai la flemme de la transposer dessus (je le ferais si je ne te semble pas assez clair) :

    [​IMG]

    a et b sont les coordonnées (teinte saturation) du point A.
    Quel est le pourcentage de bleu du point A, sachant que le point B en a 0% et les points C, D et E en ont 100% ?

    bleu(A) = (a+b) / ((a*b)+1)

    On imagine A(50%,70%)
    bleu(A) = (0.5+0.7) / ((0.5*0.7)+1) = 88.9%

    bleu(B) = (0+0) / ((0*0)+1) = 0%
    bleu(C) = (0+1) / ((0*1)+1) = 100%
    bleu(E) = (1+1) / ((1*1)+1) = 100%

    Mais c'est peut-être la même solution que celle d'oscarus : je n'ai pas eu le courage de la décripter.:D

    EDIT : Si tu veux un dégradé plus linéaire le long de ta diagonale [BE], tu peux mettre ta fonction au carré (c'est ce qui me semble le mieux) ou au cube :

    bleu(B) = 0%
    bleu(E) = 100%

    bleu(0.5,0.5) = (0.5+0.5) / ((0.5*0.5)+1) = 80%
    bleu²(0.5,0.5) = 64%
    bleu^3(0.5,0.5) = 51.2%

    ;)
     
  6. Julien W.

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    1 499
    Appréciations:
    +0 / 0 / -0
    Etrange, j'ai du me tromper quelque part alors. Je regarderai ça en détails une fois, en tout cas merci encore.
    Pareillement!

    Un grand merci également à toi 7am! Je n'ai pas encore eu le temps d'étudier ta solution. Peux-tu juste me confirmer qu'entre B et C, et B et D, le dégradé est linéaire?
     
  7. 7am

    7am

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    118
    Appréciations:
    +0 / 0 / -0
    Le dégradé est linéaire avec la fonction bleu(A) = (a+b) / ((a*b)+1). Mais ça n'est plus le cas, Si tu la mets au ² ou au ^3.
     
  8. Julien W.

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    1 499
    Appréciations:
    +0 / 0 / -0
    Ok, c'est bien ce que je pensais.
     
  9. 7am

    7am

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    118
    Appréciations:
    +0 / 0 / -0
    En fait, si tu tiens à garder un dégradé linéaire, aucune de ces formules, que ce soit celle d'oscarus ou la mienne, n'est vraiment très sympa. La mienne légèrement pire d'ailleurs.

    Je les ai balancé dans excel pour avoir une idée (un graphique en 3d le permet facilement) :

    [​IMG]
    la formule d'oscarus que j'ai adapté au même repère : = ( 1 - (1-a) * ( 1 - b) )

    [​IMG]
    ma formule : = (a+b) / ((a*b)+1)

    Dans les 2 cas, c'est assez moche quand on est proche du point B(0,0) et ça va en s'améliorant quand on arrive vers le point E(100,100)



    Du coup, en cherchant un peu, j'ai trouvé un truc qui me semble plus sympa :

    = RACINE(a^2+b^2) * (1-a) * (1-b) + ( 1 - (1-a) * ( 1 - b) ) ^2

    Elle est un peu complexe, mais ça marche bien :

    [​IMG]

    ;)
     

Partager cette page

Vous souhaitez annoncer sur le Repaire ? Contactez-nous