Discussion:
Cherche fonction...
(trop ancien pour répondre)
François Guillet
2017-04-28 14:49:34 UTC
Permalink
Pour la représentation graphique d'une valeur X variant entre 0 et 1,
j'ai besoin d'effectuer un effet de loupe sur une partie de la plage,
disons entre 2 points x1 et x2.

A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.

La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de
la loupe est également imposé, et il est tel que y0=x0.

Pour y voir plus clair :
Loading Image...

Mon but :
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1).
Contrainte : la pente p de ces courbes en x1 et en x2 devra être égale
à p pour faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.

Les solutions ne sont pas uniques.

Une idée de ce qu'on pourrait prendre ?
Julien Arlandis
2017-04-28 16:21:16 UTC
Permalink
Post by François Guillet
Pour la représentation graphique d'une valeur X variant entre 0 et 1,
j'ai besoin d'effectuer un effet de loupe sur une partie de la plage,
disons entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de
la loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1).
Contrainte : la pente p de ces courbes en x1 et en x2 devra être égale
à p pour faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Un polynome de degré 2 me semble convenir dans les deux cas.
Soit y(x) = ax²+bx+c
Pour la courbe de gauche, on doit résoudre le système suivant :
(1) y(0) = 0
(2) y(x1) = y1
(3) y'(x1) = p

Et pour la courbe de gauche :
(1) y(1) = 1
(2) y(x2) = y2
(3) y'(x2) = p
Julien Arlandis
2017-04-28 16:23:15 UTC
Permalink
Post by François Guillet
Pour la représentation graphique d'une valeur X variant entre 0 et 1,
j'ai besoin d'effectuer un effet de loupe sur une partie de la plage,
disons entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de
la loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1).
Contrainte : la pente p de ces courbes en x1 et en x2 devra être égale
à p pour faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Un polynome de degré 2 me semble convenir dans les deux cas.
Soit y(x) = ax²+bx+c
Pour la courbe de gauche, on doit résoudre le système suivant :
(1) y(0) = 0
(2) y(x1) = y1
(3) y'(x1) = p

Et pour la courbe de droite :
(1) y(1) = 1
(2) y(x2) = y2
(3) y'(x2) = p
Julien Arlandis
2017-04-28 16:24:54 UTC
Permalink
Post by François Guillet
Pour la représentation graphique d'une valeur X variant entre 0 et 1,
j'ai besoin d'effectuer un effet de loupe sur une partie de la plage,
disons entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de
la loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1).
Contrainte : la pente p de ces courbes en x1 et en x2 devra être égale
à p pour faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Un polynome de degré 2 me semble convenir dans les deux cas.
Soit y(x) = ax²+bx+c
Pour la courbe de gauche, on doit résoudre le système suivant :
(1) y(0) = 0
(2) y(x1) = y1
(3) y'(x1) = p

Et pour la courbe de droite :
(1) y(1) = 1
(2) y(x2) = y2
(3) y'(x2) = p

avec p = (y2-y1)/(x2-x1)
François Guillet
2017-04-29 10:16:45 UTC
Permalink
Post by Julien Arlandis
Pour la représentation graphique d'une valeur X variant entre 0 et 1, j'ai
besoin d'effectuer un effet de loupe sur une partie de la plage, disons
entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de la
loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1).
Contrainte : la pente p de ces courbes en x1 et en x2 devra être égale à p
pour faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Un polynome de degré 2 me semble convenir dans les deux cas.
Soit y(x) = ax²+bx+c
(1) y(0) = 0
(2) y(x1) = y1
(3) y'(x1) = p
(1) y(1) = 1
(2) y(x2) = y2
(3) y'(x2) = p
avec p = (y2-y1)/(x2-x1)
Merci Julien, ça a l'air de coller exactement avec ce que je voulais.

Pour le premier système, je trouve :
a = (p-1)*x0/x1²
b = p - 2*(p-1)*x0/x1
c = 0

Pour le second, c'est en cours, et ensuite j'implémente en C/C++.

Dire que j'ai galéré avec des cosinus sans penser aux polynômes, et que
là ça a l'air si simple... super !
Julien Arlandis
2017-04-29 11:00:08 UTC
Permalink
Post by François Guillet
Post by Julien Arlandis
Pour la représentation graphique d'une valeur X variant entre 0 et 1, j'ai
besoin d'effectuer un effet de loupe sur une partie de la plage, disons
entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de la
loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1).
Contrainte : la pente p de ces courbes en x1 et en x2 devra être égale à p
pour faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Un polynome de degré 2 me semble convenir dans les deux cas.
Soit y(x) = ax²+bx+c
(1) y(0) = 0
(2) y(x1) = y1
(3) y'(x1) = p
(1) y(1) = 1
(2) y(x2) = y2
(3) y'(x2) = p
avec p = (y2-y1)/(x2-x1)
Merci Julien, ça a l'air de coller exactement avec ce que je voulais.
a = (p-1)*x0/x1²
b = p - 2*(p-1)*x0/x1
c = 0
Si je m'en réfère à ce solveur linéaire
<http://wims.unice.fr/wims/wims.cgi>, avec :

avec A =
0, 0, 1
x1^2, x1, 1
2*x1, 1, 0


et B =
0
y1
p

j'obtiens :

a = -(y1-p x1)/x12
b = (2y1-p x1)/x1
c = 0.
Julien Arlandis
2017-04-29 11:00:45 UTC
Permalink
Post by François Guillet
Post by Julien Arlandis
Pour la représentation graphique d'une valeur X variant entre 0 et 1, j'ai
besoin d'effectuer un effet de loupe sur une partie de la plage, disons
entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de la
loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1).
Contrainte : la pente p de ces courbes en x1 et en x2 devra être égale à p
pour faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Un polynome de degré 2 me semble convenir dans les deux cas.
Soit y(x) = ax²+bx+c
(1) y(0) = 0
(2) y(x1) = y1
(3) y'(x1) = p
(1) y(1) = 1
(2) y(x2) = y2
(3) y'(x2) = p
avec p = (y2-y1)/(x2-x1)
Merci Julien, ça a l'air de coller exactement avec ce que je voulais.
a = (p-1)*x0/x1²
b = p - 2*(p-1)*x0/x1
c = 0
Si je m'en réfère à ce solveur linéaire
<http://wims.unice.fr/wims/wims.cgi>, avec :

avec A =
0, 0, 1
x1^2, x1, 1
2*x1, 1, 0


et B =
0
y1
p

j'obtiens :

a = -(y1-p x1)/x1²
b = (2y1-p x1)/x1
c = 0.
François Guillet
2017-04-29 13:33:13 UTC
Permalink
Post by François Guillet
Post by Julien Arlandis
Post by François Guillet
Pour la représentation graphique d'une valeur X variant entre 0 et 1,
j'ai besoin d'effectuer un effet de loupe sur une partie de la plage,
disons entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de
la loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1).
Contrainte : la pente p de ces courbes en x1 et en x2 devra être égale à
p pour faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Un polynome de degré 2 me semble convenir dans les deux cas.
Soit y(x) = ax²+bx+c
(1) y(0) = 0
(2) y(x1) = y1
(3) y'(x1) = p
(1) y(1) = 1
(2) y(x2) = y2
(3) y'(x2) = p
avec p = (y2-y1)/(x2-x1)
Merci Julien, ça a l'air de coller exactement avec ce que je voulais.
a = (p-1)*x0/x1²
b = p - 2*(p-1)*x0/x1
c = 0
Si je m'en réfère à ce solveur linéaire <http://wims.unice.fr/wims/wims.cgi>,
avec A = 0, 0, 1
x1^2, x1, 1
2*x1, 1, 0
et B =
0
y1
p
a = -(y1-p x1)/x1²
b = (2y1-p x1)/x1
c = 0.
Je pense que ça revient au même parce que y1 = y0 - p*(x0-x1) et y0=x0
(c'est p, x1, x0, x2 que je fixe au départ, pas y1...).
Mais je vais vérifier, et m'initier au solveur, qui a l'air pratique.
François Guillet
2017-04-30 14:23:50 UTC
Permalink
Post by François Guillet
Post by Julien Arlandis
Post by François Guillet
Pour la représentation graphique d'une valeur X variant entre 0 et 1,
j'ai besoin d'effectuer un effet de loupe sur une partie de la plage,
disons entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de
la loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1).
Contrainte : la pente p de ces courbes en x1 et en x2 devra être égale à
p pour faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Un polynome de degré 2 me semble convenir dans les deux cas.
Soit y(x) = ax²+bx+c
(1) y(0) = 0
(2) y(x1) = y1
(3) y'(x1) = p
(1) y(1) = 1
(2) y(x2) = y2
(3) y'(x2) = p
avec p = (y2-y1)/(x2-x1)
Merci Julien, ça a l'air de coller exactement avec ce que je voulais.
a = (p-1)*x0/x1²
b = p - 2*(p-1)*x0/x1
c = 0
Si je m'en réfère à ce solveur linéaire <http://wims.unice.fr/wims/wims.cgi>,
avec A = 0, 0, 1
x1^2, x1, 1
2*x1, 1, 0
et B =
0
y1
p
a = -(y1-p x1)/x1²
b = (2y1-p x1)/x1
c = 0.
Bon, c'est pas encore gagné.
J'ai implanté la première courbe.
Il s'avère que près de zéro, on a un effet "anti-loupe", un
"tassement", beaucoup trop important. La pente tend manifestement vers
l'horizontale, ça ne va pas.
Mais comme la solution de l'équation est unique, il me faut un
paramètre supplémentaire quelque part pour pouvoir imposer une pente
arbitraire à la position 0,0 (par exemple une pente 1/p me semblerait
judicieuse).
robby
2017-04-30 14:37:21 UTC
Permalink
Post by François Guillet
Il s'avère que près de zéro, on a un effet "anti-loupe", un
"tassement", beaucoup trop important. La pente tend manifestement vers
l'horizontale, ça ne va pas.
Mais comme la solution de l'équation est unique, il me faut un paramètre
supplémentaire quelque part pour pouvoir imposer une pente arbitraire à
la position 0,0 (par exemple une pente 1/p me semblerait judicieuse).
si tu veux imposer la pente minimale raisonnable en zero, alors tu as
une spline (une fonction de degré 3)
--
Fabrice
François Guillet
2017-04-30 15:09:31 UTC
Permalink
Post by François Guillet
Il s'avère que près de zéro, on a un effet "anti-loupe", un
"tassement", beaucoup trop important. La pente tend manifestement vers
l'horizontale, ça ne va pas.
Mais comme la solution de l'équation est unique, il me faut un paramètre
supplémentaire quelque part pour pouvoir imposer une pente arbitraire à
la position 0,0 (par exemple une pente 1/p me semblerait judicieuse).
si tu veux imposer la pente minimale raisonnable en zero, alors tu as une
spline (une fonction de degré 3)
J'ai pensé à ça : Loading Image...

Je cherche l'arc de cercle dont la corde est (0,0) (x1,y1) pour la
première courbe, et (x2,y2) (1,1) pour la seconde, et qui soit tangeant
à ma droite de pente p, respectivement en (x1,y1), et (x2,y2).

Ca m'évitera l'aterrisage en 0,0 ou 1,1 avec la pente horizontale de la
solution polynomiale, et j'ai l'intuition que c'est ce qui homogénise
au mieux la pente entre les deux points.
Est-ce que ça a un rapport avec la spline, je ne sais pas.
Julien Arlandis
2017-04-30 16:37:19 UTC
Permalink
Post by François Guillet
Post by François Guillet
Il s'avère que près de zéro, on a un effet "anti-loupe", un
"tassement", beaucoup trop important. La pente tend manifestement vers
l'horizontale, ça ne va pas.
Mais comme la solution de l'équation est unique, il me faut un paramètre
supplémentaire quelque part pour pouvoir imposer une pente arbitraire à
la position 0,0 (par exemple une pente 1/p me semblerait judicieuse).
si tu veux imposer la pente minimale raisonnable en zero, alors tu as une
spline (une fonction de degré 3)
J'ai pensé à ça : http://exvacuo.free.fr/temp/courbe2.jpg
Je cherche l'arc de cercle dont la corde est (0,0) (x1,y1) pour la
première courbe, et (x2,y2) (1,1) pour la seconde, et qui soit tangeant
à ma droite de pente p, respectivement en (x1,y1), et (x2,y2).
Ca m'évitera l'aterrisage en 0,0 ou 1,1 avec la pente horizontale de la
solution polynomiale, et j'ai l'intuition que c'est ce qui homogénise
au mieux la pente entre les deux points.
Est-ce que ça a un rapport avec la spline, je ne sais pas.
Si tu veux fixer une deuxième pente il te faut un polynome de degré 3
y(x) = a x³ + b x² + c x + d
avec
y(x1) = y1
y(x2) = y2
y'(x1) = p1
y'(x2) = p2

En bref, tu dois résoudre le système suivant :


\begin{pmatrix}
x_1^3 & x_1^2 & x_1 & 1\\
x_2^3 & x_2^2 & x_2 & 1\\
3 x_1^2 & 2 x_1 & 1 & 0\\
3 x_2^2 & 2 x_2 & 1 & 0\\
\end{pmatrix}

\begin{pmatrix}
a\\
b\\
c\\
d\\
\end{pmatrix}
=
\begin{pmatrix}
y1\\
y2\\
p1\\
p2\\
\end{pmatrix}
Julien Arlandis
2017-04-30 16:37:35 UTC
Permalink
Post by François Guillet
Post by François Guillet
Il s'avère que près de zéro, on a un effet "anti-loupe", un
"tassement", beaucoup trop important. La pente tend manifestement vers
l'horizontale, ça ne va pas.
Mais comme la solution de l'équation est unique, il me faut un paramètre
supplémentaire quelque part pour pouvoir imposer une pente arbitraire à
la position 0,0 (par exemple une pente 1/p me semblerait judicieuse).
si tu veux imposer la pente minimale raisonnable en zero, alors tu as une
spline (une fonction de degré 3)
J'ai pensé à ça : http://exvacuo.free.fr/temp/courbe2.jpg
Je cherche l'arc de cercle dont la corde est (0,0) (x1,y1) pour la
première courbe, et (x2,y2) (1,1) pour la seconde, et qui soit tangeant
à ma droite de pente p, respectivement en (x1,y1), et (x2,y2).
Ca m'évitera l'aterrisage en 0,0 ou 1,1 avec la pente horizontale de la
solution polynomiale, et j'ai l'intuition que c'est ce qui homogénise
au mieux la pente entre les deux points.
Est-ce que ça a un rapport avec la spline, je ne sais pas.
Si tu veux fixer une deuxième pente il te faut un polynome de degré 3
y(x) = a x³ + b x² + c x + d
avec
y(x1) = y1
y(x2) = y2
y'(x1) = p1
y'(x2) = p2

En bref, tu dois résoudre le système suivant :


\begin{pmatrix}
x_1^3 & x_1^2 & x_1 & 1\\
x_2^3 & x_2^2 & x_2 & 1\\
3 x_1^2 & 2 x_1 & 1 & 0\\
3 x_2^2 & 2 x_2 & 1 & 0\\
\end{pmatrix}

\begin{pmatrix}
a\\
b\\
c\\
d\\
\end{pmatrix}
=
\begin{pmatrix}
y1\\
y2\\
p1\\
p2\\
\end{pmatrix}
--
Ce message a été posté avec Nemo : <http://news2.nemoweb.net/?DataID=40L4yzvOpKBwXP5rNzAP8Q-***@jntp>
François Guillet
2017-05-01 10:21:07 UTC
Permalink
Post by Julien Arlandis
Post by François Guillet
Post by François Guillet
Il s'avère que près de zéro, on a un effet "anti-loupe", un
"tassement", beaucoup trop important. La pente tend manifestement vers
l'horizontale, ça ne va pas.
Mais comme la solution de l'équation est unique, il me faut un paramètre
supplémentaire quelque part pour pouvoir imposer une pente arbitraire à
la position 0,0 (par exemple une pente 1/p me semblerait judicieuse).
si tu veux imposer la pente minimale raisonnable en zero, alors tu as une
spline (une fonction de degré 3)
J'ai pensé à ça : http://exvacuo.free.fr/temp/courbe2.jpg
Je cherche l'arc de cercle dont la corde est (0,0) (x1,y1) pour la première
courbe, et (x2,y2) (1,1) pour la seconde, et qui soit tangeant à ma droite
de pente p, respectivement en (x1,y1), et (x2,y2).
Ca m'évitera l'aterrisage en 0,0 ou 1,1 avec la pente horizontale de la
solution polynomiale, et j'ai l'intuition que c'est ce qui homogénise au
mieux la pente entre les deux points.
Est-ce que ça a un rapport avec la spline, je ne sais pas.
Si tu veux fixer une deuxième pente il te faut un polynome de degré 3
y(x) = a x³ + b x² + c x + d
avec y(x1) = y1
y(x2) = y2
y'(x1) = p1
y'(x2) = p2
Aïe !
:-(

En fait, je ne veux pas "fixer" une seconde pente. Il faut voir le but.
Il s'agit au final d'une conversion d'index pour une représentation
graphique. La zone de loupe revient à enlever une portion des y
disponibles, pour la correspondance x restants, car au départ on était
dans le rapport 1/1.

On doit donc "tasser" les x restants pour les caser dans la zone des y
restants. En partant de (x1,y1), on va modifier progressivement la
pente p de départ de façon que la courbe passe en (0,0). L'optimal est
de le faire en modifiant le moins possible cette pente, mais cependant
assez pour atteindre le (0,0). La pente à l'arrivée ne doit pas être
fixée à l'avance car l'optimal ne sera pas respecté. Il y a sans doute
une façon que j'ignore, d'exprimer cette contrainte mathématiquement.
Post by Julien Arlandis
\begin{pmatrix} x_1^3 & x_1^2 & x_1 & 1\\
x_2^3 & x_2^2 & x_2 & 1\\
3 x_1^2 & 2 x_1 & 1 & 0\\
3 x_2^2 & 2 x_2 & 1 & 0\\
\end{pmatrix}
\begin{pmatrix} a\\
b\\
c\\
d\\
\end{pmatrix}
=
\begin{pmatrix} y1\\
y2\\
p1\\
p2\\
\end{pmatrix}
robby
2017-05-01 11:08:35 UTC
Permalink
L'optimal est de le
faire en modifiant le moins possible cette pente, mais cependant assez
pour atteindre le (0,0). La pente à l'arrivée ne doit pas être fixée à
l'avance car l'optimal ne sera pas respecté. Il y a sans doute une façon
que j'ignore, d'exprimer cette contrainte mathématiquement.
et pourtant c'est bien a toi de fixer le cahier des charges:
- monotonie, j'imagine
- probablement, pas de point de rebroussement (donc monotonie de la dérivée)
- courbure max au point de raccord (car dire que tu veux une continuité
de tangente n'est pas suffisant, apres tout on pourrait insérer un micro
arc de cercle intercalaire avant la corde).
- pente min puisque tu ne veux pas sur-tasser.
--
Fabrice
robby
2017-05-01 11:13:38 UTC
Permalink
Post by robby
- courbure max au point de raccord (car dire que tu veux une continuité
de tangente n'est pas suffisant, apres tout on pourrait insérer un micro
arc de cercle intercalaire avant la corde).
au fait, c'est peut-etre ça que tu veux. et qui correspond aussi a
l'idee des splines 2D ou a des rational splines, i.e. ou tu peux en plus
règler la tension des 2 tangentes extremes.

-> Si tu ne veux en fixer qu'une, pourquoi pas un arc de cercle de
longueur déterminée puis une corde ?
--
Fabrice
François Guillet
2017-05-01 13:03:00 UTC
Permalink
Post by robby
L'optimal est de le
faire en modifiant le moins possible cette pente, mais cependant assez
pour atteindre le (0,0). La pente à l'arrivée ne doit pas être fixée à
l'avance car l'optimal ne sera pas respecté. Il y a sans doute une façon
que j'ignore, d'exprimer cette contrainte mathématiquement.
certes, mais je ne le connaissais pas a priori. C'est la discussion et
les essais infructueux qui permettent de le préciser. Je viens de le
faire grossièrement en termes de néophite, reste le problème de son
expression en termes mathématiques.
Post by robby
- monotonie, j'imagine
oui
Post by robby
- probablement, pas de point de rebroussement (donc monotonie de la dérivée)
oui
Post by robby
- courbure max au point de raccord (car dire que tu veux une continuité de
tangente n'est pas suffisant, apres tout on pourrait insérer un micro arc de
cercle intercalaire avant la corde).
- pente min puisque tu ne veux pas sur-tasser.
là, pas sûr. La courbure max au point de raccord reviendrait à passer
brutalement de la pente p à la pente y1/x1, comme une intersection de
droites. C'est mon implémentation de départ pour essai, mais quand la
pente p est forte, on voit parfaitement les limites de la zone de
loupe.
Or si on a une intersection trop marquée, on ne peut plus visualiser
correctement des signaux dont la largeur de spectre serait à cheval sur
l'intersection. Par exemple la moitié de leur bande passante sera
compressée tandis que l'autre est dans la loupe.
Je voudrais donc "flouter" ces limites pour que le raccordement soit
peu visible, quitte à faire le compromis nécessaire avec le
surtassement et aussi pour le réduire, réduire la largeur de loupe par
rapport à la vue linéaire en segments. Minimaliser la variation de la
pente, ce qui met une contrainte sur la dérivée seconde, est peut-être
la solution, avec un polynome du 3ème degré comme suggérait Julien.
robby
2017-05-01 17:05:54 UTC
Permalink
Post by François Guillet
Post by robby
- courbure max au point de raccord (car dire que tu veux une
continuité de tangente n'est pas suffisant, apres tout on pourrait
insérer un micro arc de cercle intercalaire avant la corde).
- pente min puisque tu ne veux pas sur-tasser.
là, pas sûr. La courbure max au point de raccord reviendrait à passer
brutalement de la pente p à la pente y1/x1
oui, je voulais dire, "fixer la courbure max" autorisée.

ça ne t'irais pas (comme je suggerais ensuite) de juste mettre une
longueur donnee d'arc de cercle, raccordant ta pente à une corde ?
--
Fabrice
Christophe Dang Ngoc Chan
2017-05-02 12:07:25 UTC
Permalink
Post by robby
- monotonie, j'imagine
À ce propos, je signale
<URL:https://en.wikipedia.org/wiki/Monotone_cubic_interpolation>
--
Christophe Dang Ngoc Chan
Julien Arlandis
2017-05-01 14:03:31 UTC
Permalink
Post by François Guillet
En fait, je ne veux pas "fixer" une seconde pente. Il faut voir le but.
Il s'agit au final d'une conversion d'index pour une représentation
graphique. La zone de loupe revient à enlever une portion des y
disponibles, pour la correspondance x restants, car au départ on était
dans le rapport 1/1.
On doit donc "tasser" les x restants pour les caser dans la zone des y
restants. En partant de (x1,y1), on va modifier progressivement la
pente p de départ de façon que la courbe passe en (0,0). L'optimal est
de le faire en modifiant le moins possible cette pente, mais cependant
assez pour atteindre le (0,0). La pente à l'arrivée ne doit pas être
fixée à l'avance car l'optimal ne sera pas respecté. Il y a sans doute
une façon que j'ignore, d'exprimer cette contrainte mathématiquement.
Je ne comprends pas ton besoin, essaye de l'exprimer avec un dessin.
François Guillet
2017-05-01 14:59:45 UTC
Permalink
Post by Julien Arlandis
En fait, je ne veux pas "fixer" une seconde pente. Il faut voir le but. Il
s'agit au final d'une conversion d'index pour une représentation graphique.
La zone de loupe revient à enlever une portion des y disponibles, pour la
correspondance x restants, car au départ on était dans le rapport 1/1.
On doit donc "tasser" les x restants pour les caser dans la zone des y
restants. En partant de (x1,y1), on va modifier progressivement la pente p
de départ de façon que la courbe passe en (0,0). L'optimal est de le faire
en modifiant le moins possible cette pente, mais cependant assez pour
atteindre le (0,0). La pente à l'arrivée ne doit pas être fixée à l'avance
car l'optimal ne sera pas respecté. Il y a sans doute une façon que
j'ignore, d'exprimer cette contrainte mathématiquement.
Je ne comprends pas ton besoin, essaye de l'exprimer avec un dessin.
Loading Image...

Je parle de la seconde courbe, mais pour la 1ère c'est même principe.

La courbe rose a une zone trop courbée. Ensuite on n'a pas assez de
pente donc tassement, et avant, on en a trop donc on est quasiment
comme dans la zone linéaire de la loupe.

La courbe orange se courbe bien trop tôt, dès qu'on quitte la zone de
loupe, de sorte qu'ensuite elle est quasiment linéaire. Comme dans
l'autre cas, la variation de courbure est mal répartie le long de la
courbe, contrairement à la courbe verte qui est ce que je recherche.

Donc j'ai l'impression que la meilleure courbe est celle qui répartit
au mieux la variation de pente tout au long de sa longueur, tout en
"montant" le moins haut possible pour atteindre le (1,1).
Julien Arlandis
2017-05-01 15:06:00 UTC
Permalink
Post by François Guillet
Post by Julien Arlandis
En fait, je ne veux pas "fixer" une seconde pente. Il faut voir le but. Il
s'agit au final d'une conversion d'index pour une représentation graphique.
La zone de loupe revient à enlever une portion des y disponibles, pour la
correspondance x restants, car au départ on était dans le rapport 1/1.
On doit donc "tasser" les x restants pour les caser dans la zone des y
restants. En partant de (x1,y1), on va modifier progressivement la pente p
de départ de façon que la courbe passe en (0,0). L'optimal est de le faire
en modifiant le moins possible cette pente, mais cependant assez pour
atteindre le (0,0). La pente à l'arrivée ne doit pas être fixée à l'avance
car l'optimal ne sera pas respecté. Il y a sans doute une façon que
j'ignore, d'exprimer cette contrainte mathématiquement.
Je ne comprends pas ton besoin, essaye de l'exprimer avec un dessin.
http://exvacuo.free.fr/temp/courbe4.jpg
Je parle de la seconde courbe, mais pour la 1ère c'est même principe.
La courbe rose a une zone trop courbée. Ensuite on n'a pas assez de
pente donc tassement, et avant, on en a trop donc on est quasiment
comme dans la zone linéaire de la loupe.
La courbe orange se courbe bien trop tôt, dès qu'on quitte la zone de
loupe, de sorte qu'ensuite elle est quasiment linéaire. Comme dans
l'autre cas, la variation de courbure est mal répartie le long de la
courbe, contrairement à la courbe verte qui est ce que je recherche.
Donc j'ai l'impression que la meilleure courbe est celle qui répartit
au mieux la variation de pente tout au long de sa longueur, tout en
"montant" le moins haut possible pour atteindre le (1,1).
C'est quoi la zone de loupe, qu'est ce qui est sensé être affiché ?
François Guillet
2017-05-01 15:56:20 UTC
Permalink
Post by Julien Arlandis
Post by François Guillet
Post by Julien Arlandis
Post by François Guillet
En fait, je ne veux pas "fixer" une seconde pente. Il faut voir le but.
Il s'agit au final d'une conversion d'index pour une représentation
graphique. La zone de loupe revient à enlever une portion des y
disponibles, pour la correspondance x restants, car au départ on était
dans le rapport 1/1.
On doit donc "tasser" les x restants pour les caser dans la zone des y
restants. En partant de (x1,y1), on va modifier progressivement la pente
p de départ de façon que la courbe passe en (0,0). L'optimal est de le
faire en modifiant le moins possible cette pente, mais cependant assez
pour atteindre le (0,0). La pente à l'arrivée ne doit pas être fixée à
l'avance car l'optimal ne sera pas respecté. Il y a sans doute une façon
que j'ignore, d'exprimer cette contrainte mathématiquement.
Je ne comprends pas ton besoin, essaye de l'exprimer avec un dessin.
http://exvacuo.free.fr/temp/courbe4.jpg
Je parle de la seconde courbe, mais pour la 1ère c'est même principe.
La courbe rose a une zone trop courbée. Ensuite on n'a pas assez de pente
donc tassement, et avant, on en a trop donc on est quasiment comme dans la
zone linéaire de la loupe.
La courbe orange se courbe bien trop tôt, dès qu'on quitte la zone de
loupe, de sorte qu'ensuite elle est quasiment linéaire. Comme dans l'autre
cas, la variation de courbure est mal répartie le long de la courbe,
contrairement à la courbe verte qui est ce que je recherche.
Donc j'ai l'impression que la meilleure courbe est celle qui répartit au
mieux la variation de pente tout au long de sa longueur, tout en "montant"
le moins haut possible pour atteindre le (1,1).
C'est quoi la zone de loupe, qu'est ce qui est sensé être affiché ?
J'affiche un spectre électromagnétique à partir d'un bloc
d'échantillons fréquentiels d'une FFT.
x pointe un échantillon dans le bloc (j'utilise une valeur flottante,
c'est plus pratique).
y, ma sortie, va pointer la position dans un graphe où afficher
l'échantillon qui était à la position x du bloc.

Sans loupe, on a une correspondance directe, y=x.

En pratique, je multiplie x par la taille de la FFT pour avoir dans la
partie entière l'index de l'échantillon dans le bloc, et je multiplie y
par le nombre de pixels d'une ligne de graphique pour avoir le rang de
la colonne où je dois tracer l'amplitude de mon échantillon
fréquentiel.

La représentation graphique disposera en général de bien moins de
points que d'échantillons dans un bloc FFT, mais je souhaite
représenter tout le bloc FFT dans le graphe.

Si je veux faire une zone de loupe pour une tranche de spectre, par
exemple entre x1 et x2, il suffit, quand x est entre x1 et x2, que je
prenne y=x1+p*(x-x1) avec p>1. Ainsi la largeur de spectre visualisé
entre y1 et y2, repésentera un plus grand pourcentage de la largeur du
graphe, que la largeur entre x1 et x2 n'en représente un dans le bloc
FFT. C'est l'effet loupe.

Evidemment, le prix à payer est qu'il me reste moins de place sur le
graphe pour afficher les échantillons restants, ceux hors de la zone de
loupe, donc avant x1 ou après x2. Je dois donc "tasser" ces x là, et
pour cela faire une correspondence x vers y suivant deux courbes dont
la pente moyenne sera inférieur à 1, mais qui devront se raccorder "au
mieux" à la zone de loupe.
Julien Arlandis
2017-05-01 14:05:19 UTC
Permalink
Post by François Guillet
Post by Julien Arlandis
Post by François Guillet
Post by François Guillet
Il s'avère que près de zéro, on a un effet "anti-loupe", un
"tassement", beaucoup trop important. La pente tend manifestement vers
l'horizontale, ça ne va pas.
Mais comme la solution de l'équation est unique, il me faut un paramètre
supplémentaire quelque part pour pouvoir imposer une pente arbitraire à
la position 0,0 (par exemple une pente 1/p me semblerait judicieuse).
si tu veux imposer la pente minimale raisonnable en zero, alors tu as une
spline (une fonction de degré 3)
J'ai pensé à ça : http://exvacuo.free.fr/temp/courbe2.jpg
Je cherche l'arc de cercle dont la corde est (0,0) (x1,y1) pour la première
courbe, et (x2,y2) (1,1) pour la seconde, et qui soit tangeant à ma droite
de pente p, respectivement en (x1,y1), et (x2,y2).
Ca m'évitera l'aterrisage en 0,0 ou 1,1 avec la pente horizontale de la
solution polynomiale, et j'ai l'intuition que c'est ce qui homogénise au
mieux la pente entre les deux points.
Est-ce que ça a un rapport avec la spline, je ne sais pas.
Si tu veux fixer une deuxième pente il te faut un polynome de degré 3
y(x) = a x³ + b x² + c x + d
avec y(x1) = y1
y(x2) = y2
y'(x1) = p1
y'(x2) = p2
Aïe !
:-(
En fait, je ne veux pas "fixer" une seconde pente.
À la place d'une seconde pente, tu veux peut être fixer un 3ème point ?
François Guillet
2017-05-04 14:37:24 UTC
Permalink
Post by Julien Arlandis
Post by François Guillet
Post by François Guillet
Il s'avère que près de zéro, on a un effet "anti-loupe", un
"tassement", beaucoup trop important. La pente tend manifestement vers
l'horizontale, ça ne va pas.
Mais comme la solution de l'équation est unique, il me faut un paramètre
supplémentaire quelque part pour pouvoir imposer une pente arbitraire à
la position 0,0 (par exemple une pente 1/p me semblerait judicieuse).
si tu veux imposer la pente minimale raisonnable en zero, alors tu as une
spline (une fonction de degré 3)
J'ai pensé à ça : http://exvacuo.free.fr/temp/courbe2.jpg
Je cherche l'arc de cercle dont la corde est (0,0) (x1,y1) pour la première
courbe, et (x2,y2) (1,1) pour la seconde, et qui soit tangeant à ma droite
de pente p, respectivement en (x1,y1), et (x2,y2).
Ca m'évitera l'aterrisage en 0,0 ou 1,1 avec la pente horizontale de la
solution polynomiale, et j'ai l'intuition que c'est ce qui homogénise au
mieux la pente entre les deux points.
Est-ce que ça a un rapport avec la spline, je ne sais pas.
Si tu veux fixer une deuxième pente il te faut un polynome de degré 3
y(x) = a x³ + b x² + c x + d
avec y(x1) = y1
y(x2) = y2
y'(x1) = p1
y'(x2) = p2
\begin{pmatrix} x_1^3 & x_1^2 & x_1 & 1\\
x_2^3 & x_2^2 & x_2 & 1\\
3 x_1^2 & 2 x_1 & 1 & 0\\
3 x_2^2 & 2 x_2 & 1 & 0\\
\end{pmatrix}
\begin{pmatrix} a\\
b\\
c\\
d\\
\end{pmatrix}
=
\begin{pmatrix} y1\\
y2\\
p1\\
p2\\
\end{pmatrix}
J'ai suivi la méthode du polynome de degré 3 car les B-spline
entrainent des complications (du fait que la courbe ne passe pas par
les points de contrôle).

La solution générale de y = a*x³ + b*x² + c*x + d, quand on part du
point (x1,y1) avec une pente p1 pour arriver en (x2,y2) avec une pente
p2 est :

a = ( (p1+p2)*(x1−x2) − 2*y1 + 2*y2 ) / (x1-x2)³
b = ( −p1*(x1−x2)*(x1 + 2*x2) + p2*(−2x1² + x1*x2 + x2²) +
3*(x1+x2)*(y1−y2) )/(x1-x2)³
c = ( p2*x1*(x1−x2)*(x1+2*x2) − x2*( p1*(−2*x1² + x1*x2 + x2²) +
6*x1*(y1−y2)) ) / (x1-x2)³
d = ( x2*( x1*(−x1+x2)*(p2*x1 + p1*x2) − x2*(−3*x1+x2)*y1 ) +
x1²*(x1−3*x2)*y2 ) / (x1-x2)³

NB : x1,y1, x2,y2 ne sont pas ici les points du schéma mais le départ
et l'arrivée de la courbe, et je note désormais X et Y en majuscule
quand il s'agit du schéma.

Pour la première courbe, (x1,y1)=(0,0) et (x2,y2)=(X1, Y1) où
X1,Y1=début de la zone linéaire comme sur le schéma
Loading Image...

Le système se simplifie en :
a = ( -(p1+p2)*X1 + 2*Y1 ) / -X1³
b = ( 2*p1*X1² + p2*X1² - 3*X1*Y1 ) / -X1³
c = p1
d = 0

On a p2=p (p pente linéaire dans la loupe), et pour retrouver toute la
droite de pente 1 quand p=1, il faut p1=1/p.

C'est ce que j'ai utilisé pour le test. J'ai placé des barres vertes
pour visualiser l'effet, qui sont la transformation en y de points
équidistants en x. Ca donne ça :
Loading Image...

On voit qu'il y a un tassement normal plus on se rapproche de zéro et
l'ensemble est à peu près ce que je recherche.
Mais quand on arrive très près de zéro se produit un "détassement", les
barres vertes s'écartent à nouveau. Il faut vraiment choisir une pente
p1 très petite (< 0.1) pour éliminer l'effet.
Donc ma fonction n'est pas monotone. Je ne vois pas pourquoi.
Julien Arlandis
2017-05-04 20:28:50 UTC
Permalink
Post by François Guillet
C'est ce que j'ai utilisé pour le test. J'ai placé des barres vertes
pour visualiser l'effet, qui sont la transformation en y de points
http://exvacuo.free.fr/temp/x3.jpg
On voit qu'il y a un tassement normal plus on se rapproche de zéro et
l'ensemble est à peu près ce que je recherche.
Mais quand on arrive très près de zéro se produit un "détassement", les
barres vertes s'écartent à nouveau. Il faut vraiment choisir une pente
p1 très petite (< 0.1) pour éliminer l'effet.
Donc ma fonction n'est pas monotone. Je ne vois pas pourquoi.
Affiche la dérivée de ta fonction, tu vas tout de suite comprendre ce
qui se passe.
François Guillet
2017-05-05 07:16:01 UTC
Permalink
C'est ce que j'ai utilisé pour le test. J'ai placé des barres vertes pour
visualiser l'effet, qui sont la transformation en y de points équidistants
http://exvacuo.free.fr/temp/x3.jpg
On voit qu'il y a un tassement normal plus on se rapproche de zéro et
l'ensemble est à peu près ce que je recherche.
Mais quand on arrive très près de zéro se produit un "détassement", les
barres vertes s'écartent à nouveau. Il faut vraiment choisir une pente p1
très petite (< 0.1) pour éliminer l'effet.
Donc ma fonction n'est pas monotone. Je ne vois pas pourquoi.
Affiche la dérivée de ta fonction, tu vas tout de suite comprendre ce qui se
passe.
Comme on pouvait s'y attendre, la dérivée entre (0,0) et (X1,Y1)
diminue puis remonte. Ceci ne se produit que lorsque la pente d'arrivée
est supérieure à 1.5 (celle de la loupe), sinon c'est bon.

Je ne sais si j'ai une erreur dans les équations ou si c'est un
problème d'implémentation.
robby
2017-05-05 07:52:22 UTC
Permalink
Je ne sais si j'ai une erreur dans les équations ou si c'est un problème
d'implémentation.
j'ai pas suivi tout le fil, mais une spline n'a aucune raison d'etre
monotone entre les deux tangentes. C'est pour ça que d'autres version
polynomiales ou NURBS ajoutent des parametres de "tension" sur les
tangentes.

ou bien tu prend comme contrainte que la pente min est tant (je sais
meme pas si c'est tj possible de l'avoir positive),
ou bien tu utilise autre chose ;-)
--
Fabrice
François Guillet
2017-05-05 08:45:45 UTC
Permalink
Je ne sais si j'ai une erreur dans les équations ou si c'est un problème
d'implémentation.
j'ai pas suivi tout le fil, mais une spline n'a aucune raison d'etre monotone
entre les deux tangentes. C'est pour ça que d'autres version polynomiales ou
NURBS ajoutent des parametres de "tension" sur les tangentes.
ou bien tu prend comme contrainte que la pente min est tant (je sais meme pas
si c'est tj possible de l'avoir positive),
ou bien tu utilise autre chose ;-)
C'était ma question de départ : quoi utiliser ?

Je ne voulais pas fixer la pente de départ. Avec un polynôme de degré
2, la pente de départ est nulle donc on a trop de "tassement".

Julien me dit qu'avec un polynôme de degré 3 ce serait possible de
fixer la pente de départ, c'est ce que j'ai fait, mais alors je
constate que la fonction n'est plus monotone : erreur de ma part ou pas
?

Peut-on avoir ou pas un polynôme de degré 3 monotone par exemple
jusqu'à (X1,Y1) = (0.3, 0.15) pour décrire la courbe qu'on voit là,
avec p=3 ?
http://exvacuo.free.fr/temp/courbe7.jpg

Sinon quoi ?
FJ
2017-05-05 22:09:03 UTC
Permalink
Post by François Guillet
Je ne sais si j'ai une erreur dans les équations ou si c'est un problème
d'implémentation.
j'ai pas suivi tout le fil, mais une spline n'a aucune raison d'etre monotone
entre les deux tangentes. C'est pour ça que d'autres version polynomiales ou
NURBS ajoutent des parametres de "tension" sur les tangentes.
ou bien tu prend comme contrainte que la pente min est tant (je sais meme pas
si c'est tj possible de l'avoir positive),
ou bien tu utilise autre chose ;-)
C'était ma question de départ : quoi utiliser ?
Je ne voulais pas fixer la pente de départ. Avec un polynôme de degré
2, la pente de départ est nulle donc on a trop de "tassement".
Julien me dit qu'avec un polynôme de degré 3 ce serait possible de
fixer la pente de départ, c'est ce que j'ai fait, mais alors je
constate que la fonction n'est plus monotone : erreur de ma part ou pas
?
Peut-on avoir ou pas un polynôme de degré 3 monotone par exemple
jusqu'à (X1,Y1) = (0.3, 0.15) pour décrire la courbe qu'on voit là,
avec p=3 ?
http://exvacuo.free.fr/temp/courbe7.jpg
Sinon quoi ?
quand je veux une courbe plus tendue qu'un polynome de degré 3 , je prend
x(t) et y(t) où x(t) et y(t) sont des polynomes de degré plus bas (2 par
exemple) de la variable intermédiaire t.
François Guillet
2017-05-06 09:33:36 UTC
Permalink
Post by FJ
Post by François Guillet
Je ne sais si j'ai une erreur dans les équations ou si c'est un problème
d'implémentation.
j'ai pas suivi tout le fil, mais une spline n'a aucune raison d'etre monotone
entre les deux tangentes. C'est pour ça que d'autres version polynomiales ou
NURBS ajoutent des parametres de "tension" sur les tangentes.
ou bien tu prend comme contrainte que la pente min est tant (je sais meme pas
si c'est tj possible de l'avoir positive),
ou bien tu utilise autre chose ;-)
C'était ma question de départ : quoi utiliser ?
Je ne voulais pas fixer la pente de départ. Avec un polynôme de degré
2, la pente de départ est nulle donc on a trop de "tassement".
Julien me dit qu'avec un polynôme de degré 3 ce serait possible de
fixer la pente de départ, c'est ce que j'ai fait, mais alors je
constate que la fonction n'est plus monotone : erreur de ma part ou pas
?
Peut-on avoir ou pas un polynôme de degré 3 monotone par exemple
jusqu'à (X1,Y1) = (0.3, 0.15) pour décrire la courbe qu'on voit là,
avec p=3 ?
http://exvacuo.free.fr/temp/courbe7.jpg
Sinon quoi ?
quand je veux une courbe plus tendue qu'un polynome de degré 3 , je prend
x(t) et y(t) où x(t) et y(t) sont des polynomes de degré plus bas (2 par
exemple) de la variable intermédiaire t.
ok, je note, toutes les idées sont bienvenues, il y a en effet un
choix arbitraire à faire.
Julien Arlandis
2017-05-06 08:24:19 UTC
Permalink
Post by François Guillet
Je ne sais si j'ai une erreur dans les équations ou si c'est un problème
d'implémentation.
j'ai pas suivi tout le fil, mais une spline n'a aucune raison d'etre monotone
entre les deux tangentes. C'est pour ça que d'autres version polynomiales ou
NURBS ajoutent des parametres de "tension" sur les tangentes.
ou bien tu prend comme contrainte que la pente min est tant (je sais meme pas
si c'est tj possible de l'avoir positive),
ou bien tu utilise autre chose ;-)
C'était ma question de départ : quoi utiliser ?
Je ne voulais pas fixer la pente de départ. Avec un polynôme de degré
2, la pente de départ est nulle donc on a trop de "tassement".
Julien me dit qu'avec un polynôme de degré 3 ce serait possible de
fixer la pente de départ, c'est ce que j'ai fait, mais alors je
constate que la fonction n'est plus monotone : erreur de ma part ou pas
?
Peut-on avoir ou pas un polynôme de degré 3 monotone par exemple
jusqu'à (X1,Y1) = (0.3, 0.15) pour décrire la courbe qu'on voit là,
avec p=3 ?
http://exvacuo.free.fr/temp/courbe7.jpg
Sinon quoi ?
Ce que tu demandes est quasi impossible, tu veux un polynome de degré 3
qui soit quasi-linéaire au voisinage de 0. Cela implique que la dérivée
seconde de ce polynome est quasi-nulle, or cette dérivée seconde est une
droite d'équation f''(x) = 6ax + 2b. Si tu minimises a, b sera trop grand
et si tu minimises b ta droite sera trop penchée, tu ne peux pas non plus
contraindre a et b car tu as déjà 3 contraintes (2 points et une pente
à fixer). Il te faut donc un polynome de degré 4.
f(x) = ax⁴ + bx³ + cx² + dx + e
La dérivée seconde est une parabole
f''(x) = 12 ax² + 6bx + 2c
pour avoir un max de linéarité autour de f(0), le sommet de ta parabole
f''(x) doit être en (0,0) ceci implique que b=0 et c=0.
Ta fonction peut donc s'écrire f(x) = ax⁴ + dx + e
avec les conditions suivantes :
f(0) = 0
f(x1) = y1
f'(x1) = p1
qui se résout :
a = (p1*x1-y1)/(3*x1⁴)
b = -(p1*x1-4*y1)/(3*x1)
e = 0
François Guillet
2017-05-06 09:41:45 UTC
Permalink
Post by François Guillet
Post by robby
Je ne sais si j'ai une erreur dans les équations ou si c'est un problème
d'implémentation.
j'ai pas suivi tout le fil, mais une spline n'a aucune raison d'etre
monotone entre les deux tangentes. C'est pour ça que d'autres version
polynomiales ou NURBS ajoutent des parametres de "tension" sur les
tangentes.
ou bien tu prend comme contrainte que la pente min est tant (je sais meme
pas si c'est tj possible de l'avoir positive),
ou bien tu utilise autre chose ;-)
C'était ma question de départ : quoi utiliser ?
Je ne voulais pas fixer la pente de départ. Avec un polynôme de degré 2, la
pente de départ est nulle donc on a trop de "tassement".
Julien me dit qu'avec un polynôme de degré 3 ce serait possible de fixer la
pente de départ, c'est ce que j'ai fait, mais alors je constate que la
fonction n'est plus monotone : erreur de ma part ou pas ?
Peut-on avoir ou pas un polynôme de degré 3 monotone par exemple jusqu'à
(X1,Y1) = (0.3, 0.15) pour décrire la courbe qu'on voit là, avec p=3 ?
http://exvacuo.free.fr/temp/courbe7.jpg
Sinon quoi ?
Ce que tu demandes est quasi impossible, tu veux un polynome de degré 3 qui
soit quasi-linéaire au voisinage de 0. Cela implique que la dérivée seconde
de ce polynome est quasi-nulle, or cette dérivée seconde est une droite
d'équation f''(x) = 6ax + 2b. Si tu minimises a, b sera trop grand et si tu
minimises b ta droite sera trop penchée, tu ne peux pas non plus contraindre
a et b car tu as déjà 3 contraintes (2 points et une pente à fixer). Il te
faut donc un polynome de degré 4.
f(x) = ax⁴ + bx³ + cx² + dx + e
La dérivée seconde est une parabole
f''(x) = 12 ax² + 6bx + 2c
pour avoir un max de linéarité autour de f(0), le sommet de ta parabole
f''(x) doit être en (0,0) ceci implique que b=0 et c=0.
Ta fonction peut donc s'écrire f(x) = ax⁴ + dx + e
f(0) = 0
f(x1) = y1
f'(x1) = p1
a = (p1*x1-y1)/(3*x1⁴)
b = -(p1*x1-4*y1)/(3*x1)
e = 0
Es-tu sûr qu'il y aura une solution quelque soit la valeur de p1 (on
pourra avoir p1>100) ?
Je commence à avoir des doutes avec une solution en polynôme. Je me
demande si une portion d'ellipse ne serait pas préférable : on peut
passer d'une pente verticale (cas max critique) à n'importe quelle
autre, sur n'importe quelle "distance".
Julien Arlandis
2017-05-06 10:12:44 UTC
Permalink
Post by François Guillet
Post by François Guillet
Post by robby
Je ne sais si j'ai une erreur dans les équations ou si c'est un problème
d'implémentation.
j'ai pas suivi tout le fil, mais une spline n'a aucune raison d'etre
monotone entre les deux tangentes. C'est pour ça que d'autres version
polynomiales ou NURBS ajoutent des parametres de "tension" sur les
tangentes.
ou bien tu prend comme contrainte que la pente min est tant (je sais meme
pas si c'est tj possible de l'avoir positive),
ou bien tu utilise autre chose ;-)
C'était ma question de départ : quoi utiliser ?
Je ne voulais pas fixer la pente de départ. Avec un polynôme de degré 2, la
pente de départ est nulle donc on a trop de "tassement".
Julien me dit qu'avec un polynôme de degré 3 ce serait possible de fixer la
pente de départ, c'est ce que j'ai fait, mais alors je constate que la
fonction n'est plus monotone : erreur de ma part ou pas ?
Peut-on avoir ou pas un polynôme de degré 3 monotone par exemple jusqu'à
(X1,Y1) = (0.3, 0.15) pour décrire la courbe qu'on voit là, avec p=3 ?
http://exvacuo.free.fr/temp/courbe7.jpg
Sinon quoi ?
Ce que tu demandes est quasi impossible, tu veux un polynome de degré 3 qui
soit quasi-linéaire au voisinage de 0. Cela implique que la dérivée seconde
de ce polynome est quasi-nulle, or cette dérivée seconde est une droite
d'équation f''(x) = 6ax + 2b. Si tu minimises a, b sera trop grand et si tu
minimises b ta droite sera trop penchée, tu ne peux pas non plus contraindre
a et b car tu as déjà 3 contraintes (2 points et une pente à fixer). Il te
faut donc un polynome de degré 4.
f(x) = ax⁴ + bx³ + cx² + dx + e
La dérivée seconde est une parabole
f''(x) = 12 ax² + 6bx + 2c
pour avoir un max de linéarité autour de f(0), le sommet de ta parabole
f''(x) doit être en (0,0) ceci implique que b=0 et c=0.
Ta fonction peut donc s'écrire f(x) = ax⁴ + dx + e
f(0) = 0
f(x1) = y1
f'(x1) = p1
a = (p1*x1-y1)/(3*x1⁴)
b = -(p1*x1-4*y1)/(3*x1)
e = 0
Es-tu sûr qu'il y aura une solution quelque soit la valeur de p1 (on
pourra avoir p1>100) ?
Je commence à avoir des doutes avec une solution en polynôme. Je me
demande si une portion d'ellipse ne serait pas préférable : on peut
passer d'une pente verticale (cas max critique) à n'importe quelle
autre, sur n'importe quelle "distance".
Oui tu auras une valeur pour tout p1, mais par contre tu vas avoir un fort
tassement en 0.
Avec un polynome, je ne vois pas comment tu peux éviter le tassement tout
en ayant de la linéarité.
François Guillet
2017-05-06 11:13:32 UTC
Permalink
Post by Julien Arlandis
Post by Julien Arlandis
Post by François Guillet
Post by robby
Je ne sais si j'ai une erreur dans les équations ou si c'est un problème
d'implémentation.
j'ai pas suivi tout le fil, mais une spline n'a aucune raison d'etre
monotone entre les deux tangentes. C'est pour ça que d'autres version
polynomiales ou NURBS ajoutent des parametres de "tension" sur les
tangentes.
ou bien tu prend comme contrainte que la pente min est tant (je sais
meme pas si c'est tj possible de l'avoir positive),
ou bien tu utilise autre chose ;-)
C'était ma question de départ : quoi utiliser ?
Je ne voulais pas fixer la pente de départ. Avec un polynôme de degré 2,
la pente de départ est nulle donc on a trop de "tassement".
Julien me dit qu'avec un polynôme de degré 3 ce serait possible de fixer
la pente de départ, c'est ce que j'ai fait, mais alors je constate que la
fonction n'est plus monotone : erreur de ma part ou pas ?
Peut-on avoir ou pas un polynôme de degré 3 monotone par exemple jusqu'à
(X1,Y1) = (0.3, 0.15) pour décrire la courbe qu'on voit là, avec p=3 ?
http://exvacuo.free.fr/temp/courbe7.jpg
Sinon quoi ?
Ce que tu demandes est quasi impossible, tu veux un polynome de degré 3
qui soit quasi-linéaire au voisinage de 0. Cela implique que la dérivée
seconde de ce polynome est quasi-nulle, or cette dérivée seconde est une
droite d'équation f''(x) = 6ax + 2b. Si tu minimises a, b sera trop grand
et si tu minimises b ta droite sera trop penchée, tu ne peux pas non plus
contraindre a et b car tu as déjà 3 contraintes (2 points et une pente à
fixer). Il te faut donc un polynome de degré 4.
f(x) = ax⁴ + bx³ + cx² + dx + e
La dérivée seconde est une parabole
f''(x) = 12 ax² + 6bx + 2c
pour avoir un max de linéarité autour de f(0), le sommet de ta parabole
f''(x) doit être en (0,0) ceci implique que b=0 et c=0.
Ta fonction peut donc s'écrire f(x) = ax⁴ + dx + e
f(0) = 0
f(x1) = y1
f'(x1) = p1
a = (p1*x1-y1)/(3*x1⁴)
b = -(p1*x1-4*y1)/(3*x1)
e = 0
Es-tu sûr qu'il y aura une solution quelque soit la valeur de p1 (on pourra
avoir p1>100) ?
Je commence à avoir des doutes avec une solution en polynôme. Je me demande
si une portion d'ellipse ne serait pas préférable : on peut passer d'une
pente verticale (cas max critique) à n'importe quelle autre, sur n'importe
quelle "distance".
Oui tu auras une valeur pour tout p1, mais par contre tu vas avoir un fort
tassement en 0.
Je ne pense pas. Tu peux fixer arbitrairement la pente à l'arrivée
pourvu qu'elle soit inférieure à 1. On peut jouer aussi sur
l'inclinaison de l'ellipse, je pense qu'on a plus de degrés de liberté
qu'il n'en faut, ce sera d'ailleurs le problème (en plus des équations,
ça n'a pas l'air coton).
Post by Julien Arlandis
Avec un polynome, je ne vois pas comment tu peux éviter le tassement tout en
ayant de la linéarité.
Oui, il y a un choix à faire. Doit-on faire un "virage serré" juste
avant (x1,y1) (donc très linéaire avant), ou répartir la variation de
courbure sur toute la courbe. La seconde solution me semble meilleure,
elle permettra une visualisation plus homogène du spectre hors de la
zone de loupe.
Julien Arlandis
2017-05-06 10:16:45 UTC
Permalink
Post by François Guillet
Post by François Guillet
Post by robby
Je ne sais si j'ai une erreur dans les équations ou si c'est un problème
d'implémentation.
j'ai pas suivi tout le fil, mais une spline n'a aucune raison d'etre
monotone entre les deux tangentes. C'est pour ça que d'autres version
polynomiales ou NURBS ajoutent des parametres de "tension" sur les
tangentes.
ou bien tu prend comme contrainte que la pente min est tant (je sais meme
pas si c'est tj possible de l'avoir positive),
ou bien tu utilise autre chose ;-)
C'était ma question de départ : quoi utiliser ?
Je ne voulais pas fixer la pente de départ. Avec un polynôme de degré 2, la
pente de départ est nulle donc on a trop de "tassement".
Julien me dit qu'avec un polynôme de degré 3 ce serait possible de fixer la
pente de départ, c'est ce que j'ai fait, mais alors je constate que la
fonction n'est plus monotone : erreur de ma part ou pas ?
Peut-on avoir ou pas un polynôme de degré 3 monotone par exemple jusqu'à
(X1,Y1) = (0.3, 0.15) pour décrire la courbe qu'on voit là, avec p=3 ?
http://exvacuo.free.fr/temp/courbe7.jpg
Sinon quoi ?
Ce que tu demandes est quasi impossible, tu veux un polynome de degré 3 qui
soit quasi-linéaire au voisinage de 0. Cela implique que la dérivée seconde
de ce polynome est quasi-nulle, or cette dérivée seconde est une droite
d'équation f''(x) = 6ax + 2b. Si tu minimises a, b sera trop grand et si tu
minimises b ta droite sera trop penchée, tu ne peux pas non plus contraindre
a et b car tu as déjà 3 contraintes (2 points et une pente à fixer). Il te
faut donc un polynome de degré 4.
f(x) = ax⁴ + bx³ + cx² + dx + e
La dérivée seconde est une parabole
f''(x) = 12 ax² + 6bx + 2c
pour avoir un max de linéarité autour de f(0), le sommet de ta parabole
f''(x) doit être en (0,0) ceci implique que b=0 et c=0.
Ta fonction peut donc s'écrire f(x) = ax⁴ + dx + e
f(0) = 0
f(x1) = y1
f'(x1) = p1
a = (p1*x1-y1)/(3*x1⁴)
b = -(p1*x1-4*y1)/(3*x1)
e = 0
Es-tu sûr qu'il y aura une solution quelque soit la valeur de p1 (on
pourra avoir p1>100) ?
Je commence à avoir des doutes avec une solution en polynôme. Je me
demande si une portion d'ellipse ne serait pas préférable : on peut
passer d'une pente verticale (cas max critique) à n'importe quelle
autre, sur n'importe quelle "distance".
Je te suggère tout de même d'essayer cette solution, au passage c'est d
= -(p1*x1-4*y1)/(3*x1) et non pas b.
François Guillet
2017-05-06 12:31:38 UTC
Permalink
Post by Julien Arlandis
Post by François Guillet
Post by robby
Je ne sais si j'ai une erreur dans les équations ou si c'est un problème
d'implémentation.
j'ai pas suivi tout le fil, mais une spline n'a aucune raison d'etre
monotone entre les deux tangentes. C'est pour ça que d'autres version
polynomiales ou NURBS ajoutent des parametres de "tension" sur les
tangentes.
ou bien tu prend comme contrainte que la pente min est tant (je sais
meme pas si c'est tj possible de l'avoir positive),
ou bien tu utilise autre chose ;-)
C'était ma question de départ : quoi utiliser ?
Je ne voulais pas fixer la pente de départ. Avec un polynôme de degré 2,
la pente de départ est nulle donc on a trop de "tassement".
Julien me dit qu'avec un polynôme de degré 3 ce serait possible de fixer
la pente de départ, c'est ce que j'ai fait, mais alors je constate que la
fonction n'est plus monotone : erreur de ma part ou pas ?
Peut-on avoir ou pas un polynôme de degré 3 monotone par exemple jusqu'à
(X1,Y1) = (0.3, 0.15) pour décrire la courbe qu'on voit là, avec p=3 ?
http://exvacuo.free.fr/temp/courbe7.jpg
Sinon quoi ?
Ce que tu demandes est quasi impossible, tu veux un polynome de degré 3
qui soit quasi-linéaire au voisinage de 0. Cela implique que la dérivée
seconde de ce polynome est quasi-nulle, or cette dérivée seconde est une
droite d'équation f''(x) = 6ax + 2b. Si tu minimises a, b sera trop grand
et si tu minimises b ta droite sera trop penchée, tu ne peux pas non plus
contraindre a et b car tu as déjà 3 contraintes (2 points et une pente à
fixer). Il te faut donc un polynome de degré 4.
f(x) = ax⁴ + bx³ + cx² + dx + e
La dérivée seconde est une parabole
f''(x) = 12 ax² + 6bx + 2c
pour avoir un max de linéarité autour de f(0), le sommet de ta parabole
f''(x) doit être en (0,0) ceci implique que b=0 et c=0.
Ta fonction peut donc s'écrire f(x) = ax⁴ + dx + e
f(0) = 0
f(x1) = y1
f'(x1) = p1
a = (p1*x1-y1)/(3*x1⁴)
b = -(p1*x1-4*y1)/(3*x1)
e = 0
Es-tu sûr qu'il y aura une solution quelque soit la valeur de p1 (on pourra
avoir p1>100) ?
Je commence à avoir des doutes avec une solution en polynôme. Je me demande
si une portion d'ellipse ne serait pas préférable : on peut passer d'une
pente verticale (cas max critique) à n'importe quelle autre, sur n'importe
quelle "distance".
Je te suggère tout de même d'essayer cette solution, au passage c'est d =
-(p1*x1-4*y1)/(3*x1) et non pas b.
Ca marche, mais avec trop de tassement vers zéro. On peut modifier le
paramétrage ?

Loading Image...
(et encore là, j'ai divisé par deux la plage de loupe par rapport aux
autres essais)
Julien Arlandis
2017-05-06 12:41:03 UTC
Permalink
Post by François Guillet
Post by Julien Arlandis
Post by François Guillet
Post by robby
Je ne sais si j'ai une erreur dans les équations ou si c'est un problème
d'implémentation.
j'ai pas suivi tout le fil, mais une spline n'a aucune raison d'etre
monotone entre les deux tangentes. C'est pour ça que d'autres version
polynomiales ou NURBS ajoutent des parametres de "tension" sur les
tangentes.
ou bien tu prend comme contrainte que la pente min est tant (je sais
meme pas si c'est tj possible de l'avoir positive),
ou bien tu utilise autre chose ;-)
C'était ma question de départ : quoi utiliser ?
Je ne voulais pas fixer la pente de départ. Avec un polynôme de degré 2,
la pente de départ est nulle donc on a trop de "tassement".
Julien me dit qu'avec un polynôme de degré 3 ce serait possible de fixer
la pente de départ, c'est ce que j'ai fait, mais alors je constate que la
fonction n'est plus monotone : erreur de ma part ou pas ?
Peut-on avoir ou pas un polynôme de degré 3 monotone par exemple jusqu'à
(X1,Y1) = (0.3, 0.15) pour décrire la courbe qu'on voit là, avec p=3 ?
http://exvacuo.free.fr/temp/courbe7.jpg
Sinon quoi ?
Ce que tu demandes est quasi impossible, tu veux un polynome de degré 3
qui soit quasi-linéaire au voisinage de 0. Cela implique que la dérivée
seconde de ce polynome est quasi-nulle, or cette dérivée seconde est une
droite d'équation f''(x) = 6ax + 2b. Si tu minimises a, b sera trop grand
et si tu minimises b ta droite sera trop penchée, tu ne peux pas non plus
contraindre a et b car tu as déjà 3 contraintes (2 points et une pente à
fixer). Il te faut donc un polynome de degré 4.
f(x) = ax⁴ + bx³ + cx² + dx + e
La dérivée seconde est une parabole
f''(x) = 12 ax² + 6bx + 2c
pour avoir un max de linéarité autour de f(0), le sommet de ta parabole
f''(x) doit être en (0,0) ceci implique que b=0 et c=0.
Ta fonction peut donc s'écrire f(x) = ax⁴ + dx + e
f(0) = 0
f(x1) = y1
f'(x1) = p1
a = (p1*x1-y1)/(3*x1⁴)
b = -(p1*x1-4*y1)/(3*x1)
e = 0
Es-tu sûr qu'il y aura une solution quelque soit la valeur de p1 (on pourra
avoir p1>100) ?
Je commence à avoir des doutes avec une solution en polynôme. Je me demande
si une portion d'ellipse ne serait pas préférable : on peut passer d'une
pente verticale (cas max critique) à n'importe quelle autre, sur n'importe
quelle "distance".
Je te suggère tout de même d'essayer cette solution, au passage c'est d =
-(p1*x1-4*y1)/(3*x1) et non pas b.
Ca marche, mais avec trop de tassement vers zéro. On peut modifier le
paramétrage ?
Tu peux construire un paramétrage en combinant deux polynômes du même
type mais ayant des pentes différentes, une cuisine du genre :
f(x) = (A * f_p1(x) + B * f_p2(x)) / (A + B)
(Ici, si A = B, tu obtiens la moyenne des 2 polynômes).
Post by François Guillet
http://exvacuo.free.fr/temp/x4.jpg
(et encore là, j'ai divisé par deux la plage de loupe par rapport aux
autres essais)
François Guillet
2017-05-06 12:55:17 UTC
Permalink
Post by François Guillet
Post by François Guillet
Post by Julien Arlandis
Post by François Guillet
Post by robby
Je ne sais si j'ai une erreur dans les équations ou si c'est un problème
d'implémentation.
j'ai pas suivi tout le fil, mais une spline n'a aucune raison d'etre
monotone entre les deux tangentes. C'est pour ça que d'autres version
polynomiales ou NURBS ajoutent des parametres de "tension" sur les
tangentes.
ou bien tu prend comme contrainte que la pente min est tant (je sais
meme pas si c'est tj possible de l'avoir positive),
ou bien tu utilise autre chose ;-)
C'était ma question de départ : quoi utiliser ?
Je ne voulais pas fixer la pente de départ. Avec un polynôme de degré
2, la pente de départ est nulle donc on a trop de "tassement".
Julien me dit qu'avec un polynôme de degré 3 ce serait possible de
fixer la pente de départ, c'est ce que j'ai fait, mais alors je
constate que la fonction n'est plus monotone : erreur de ma part ou pas
?
Peut-on avoir ou pas un polynôme de degré 3 monotone par exemple
jusqu'à (X1,Y1) = (0.3, 0.15) pour décrire la courbe qu'on voit là,
avec p=3 ?
http://exvacuo.free.fr/temp/courbe7.jpg
Sinon quoi ?
Ce que tu demandes est quasi impossible, tu veux un polynome de degré 3
qui soit quasi-linéaire au voisinage de 0. Cela implique que la dérivée
seconde de ce polynome est quasi-nulle, or cette dérivée seconde est une
droite d'équation f''(x) = 6ax + 2b. Si tu minimises a, b sera trop
grand et si tu minimises b ta droite sera trop penchée, tu ne peux pas
non plus contraindre a et b car tu as déjà 3 contraintes (2 points et
une pente à fixer). Il te faut donc un polynome de degré 4.
f(x) = ax⁴ + bx³ + cx² + dx + e
La dérivée seconde est une parabole
f''(x) = 12 ax² + 6bx + 2c
pour avoir un max de linéarité autour de f(0), le sommet de ta parabole
f''(x) doit être en (0,0) ceci implique que b=0 et c=0.
Ta fonction peut donc s'écrire f(x) = ax⁴ + dx + e
f(0) = 0
f(x1) = y1
f'(x1) = p1
a = (p1*x1-y1)/(3*x1⁴)
b = -(p1*x1-4*y1)/(3*x1)
e = 0
Es-tu sûr qu'il y aura une solution quelque soit la valeur de p1 (on
pourra avoir p1>100) ?
Je commence à avoir des doutes avec une solution en polynôme. Je me
demande si une portion d'ellipse ne serait pas préférable : on peut
passer d'une pente verticale (cas max critique) à n'importe quelle autre,
sur n'importe quelle "distance".
Je te suggère tout de même d'essayer cette solution, au passage c'est d =
-(p1*x1-4*y1)/(3*x1) et non pas b.
Ca marche, mais avec trop de tassement vers zéro. On peut modifier le
paramétrage ?
Tu peux construire un paramétrage en combinant deux polynômes du même type
f(x) = (A * f_p1(x) + B * f_p2(x)) / (A + B)
(Ici, si A = B, tu obtiens la moyenne des 2 polynômes).
Ok

Une nouvelle image du résultat précédent, avec le centre et la largeur
de loupe marquée par des traits blancs.
Loading Image...
On comprend mieux la nécessité du ré-équilibrage du tassement à faire
vers la droite.
Maboule
2017-05-06 13:42:33 UTC
Permalink
.......
Post by François Guillet
Post by Julien Arlandis
Tu peux construire un paramétrage en combinant deux polynômes du même
f(x) = (A * f_p1(x) + B * f_p2(x)) / (A + B)
(Ici, si A = B, tu obtiens la moyenne des 2 polynômes).
Ok
Une nouvelle image du résultat précédent, avec le centre et la largeur
de loupe marquée par des traits blancs.
http://exvacuo.free.fr/temp/x4-2.jpg
On comprend mieux la nécessité du ré-équilibrage du tassement à faire
vers la droite.
Hum, ils y sont "presque" depuis une éternité ! A ce rythme, ils y
arriveront après la fin du monde. :-)
Lucas Levrel
2017-05-06 08:31:07 UTC
Permalink
Julien me dit qu'avec un polynôme de degré 3 ce serait possible de fixer la
pente de départ, c'est ce que j'ai fait, mais alors je constate que la
fonction n'est plus monotone : erreur de ma part ou pas ?
Je ne pense pas (mais je n'ai pas vérifié les calculs).
Peut-on avoir ou pas un polynôme de degré 3 monotone par exemple jusqu'à
(X1,Y1) = (0.3, 0.15) pour décrire la courbe qu'on voit là, avec p=3 ?
http://exvacuo.free.fr/temp/courbe7.jpg
Ce n'est pas la monotonie que tu veux, mais la monotonie de la dérivée.
Donc une dérivée seconde toujours positive. Vois si tu peux en déduire la
valeur max admissible de p1 en fonction des autres paramètres (p, X1, Y1).
--
LL
Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
François Guillet
2017-05-06 09:43:42 UTC
Permalink
Post by Lucas Levrel
Julien me dit qu'avec un polynôme de degré 3 ce serait possible de fixer la
pente de départ, c'est ce que j'ai fait, mais alors je constate que la
fonction n'est plus monotone : erreur de ma part ou pas ?
Je ne pense pas (mais je n'ai pas vérifié les calculs).
Peut-on avoir ou pas un polynôme de degré 3 monotone par exemple jusqu'à
(X1,Y1) = (0.3, 0.15) pour décrire la courbe qu'on voit là, avec p=3 ?
http://exvacuo.free.fr/temp/courbe7.jpg
Ce n'est pas la monotonie que tu veux, mais la monotonie de la dérivée. Donc
une dérivée seconde toujours positive. Vois si tu peux en déduire la valeur
max admissible de p1 en fonction des autres paramètres (p, X1, Y1).
Oui, voilà, c'est là que j'en suis.
J'ai l'impression que c'est possible avec une portion d'ellipse.
robby
2017-05-06 08:31:13 UTC
Permalink
Julien me dit qu'avec un polynôme de degré 3 ce serait possible de fixer
la pente de départ, c'est ce que j'ai fait, mais alors je constate que
la fonction n'est plus monotone : erreur de ma part ou pas ?
non: comme je le disais, ça peut arriver.
Par exemple: pente 1 en (0,0), pente 1 en (1,0.001), forcement la
courbe va faire un S couché entre les deux.

donc ce que tu veux, c'est pas fixer la pente en zero, mais la pente min.

->
P(x) = ax³+bx²+cx+d
P(0) = 0 -> d=0
P(x1) = y1 = a.x1³+b.x1²+c.x1 (1)
P'(x1) = p1 = 3a.x1²+2b.x1+c (2)
extrema en P"(xm)=0 soit 6a.xm+2b soit xm = -b/3a
P'(xm) = pm = c-b²/3a (3)

tu n'a plus qu'a resoudre le systeme (1,2,3)
--
Fabrice
robby
2017-05-06 11:13:55 UTC
Permalink
François Guillet: j'ai l'impression que tu n'a pas vu ce post avec la
solution dedans.
Post by robby
Julien me dit qu'avec un polynôme de degré 3 ce serait possible de fixer
la pente de départ, c'est ce que j'ai fait, mais alors je constate que
la fonction n'est plus monotone : erreur de ma part ou pas ?
non: comme je le disais, ça peut arriver.
Par exemple: pente 1 en (0,0), pente 1 en (1,0.001), forcement la
courbe va faire un S couché entre les deux.
donc ce que tu veux, c'est pas fixer la pente en zero, mais la pente min.
->
P(x) = ax³+bx²+cx+d
P(0) = 0 -> d=0
P(x1) = y1 = a.x1³+b.x1²+c.x1 (1)
P'(x1) = p1 = 3a.x1²+2b.x1+c (2)
extrema en P"(xm)=0 soit 6a.xm+2b soit xm = -b/3a
P'(xm) = pm = c-b²/3a (3)
tu n'a plus qu'a resoudre le systeme (1,2,3)
--
Fabrice
robby
2017-05-06 16:07:11 UTC
Permalink
Post by robby
donc ce que tu veux, c'est pas fixer la pente en zero, mais la pente min.
->
P(x) = ax³+bx²+cx+d
P(0) = 0 -> d=0
P(x1) = y1 = a.x1³+b.x1²+c.x1 (1)
P'(x1) = p1 = 3a.x1²+2b.x1+c (2)
extrema en P"(xm)=0 soit 6a.xm+2b soit xm = -b/3a
P'(xm) = pm = c-b²/3a (3)
tu n'a plus qu'a resoudre le systeme (1,2,3)
non, c'est toujours pas ça, car la pente min doit vraiment etre en zero,
car en fait on veut aussi que la derivee seconde soit toujours positive.

graphe interactif: https://www.desmos.com/calculator/kunhyuxevj
--
Fabrice
François Guillet
2017-05-06 19:45:10 UTC
Permalink
Post by robby
donc ce que tu veux, c'est pas fixer la pente en zero, mais la pente min.
->
P(x) = ax³+bx²+cx+d
P(0) = 0 -> d=0
P(x1) = y1 = a.x1³+b.x1²+c.x1 (1)
P'(x1) = p1 = 3a.x1²+2b.x1+c (2)
extrema en P"(xm)=0 soit 6a.xm+2b soit xm = -b/3a
P'(xm) = pm = c-b²/3a (3)
tu n'a plus qu'a resoudre le systeme (1,2,3)
non, c'est toujours pas ça, car la pente min doit vraiment etre en zero, car
en fait on veut aussi que la derivee seconde soit toujours positive.
oui
Si l'utilisateur a une vue d'un spectre avec des alternances de zones
compressées et d'autres non, il ne saura plus où il en est.

Le but est de visualiser dans un graphe (y = index de colonne pixel)
tout un spectre électromagnétique (x = index fréquence).
Par défaut y=x, la pente est 1. Mais on veut en plus agrandir une
certaine plage de x (pente >1, ce qui nécessite une plage de y plus
grande que la plage de x). On est donc bien obligé de "tasser" le reste
du spectre dans la place restante. Le rôle de la courbe est de le faire
subjectivement le mieux possible.
Un tassement de pente contante y1/x1 serait l'idéal, sauf au point
charnière avec la zone de loupe puisqu'on aurait un changement abrupte
de la pente. Il faut donc faire un compromis entre une pente d'arrivée
qui sera inférieur à y1/x1 et l'arrondi de connection avec la partie
rectiligne de la loupe. La fonction doit être monotone sinon on aura un
spectre en accordéon.
graphe interactif: https://www.desmos.com/calculator/kunhyuxevj
Christophe Dang Ngoc Chan
2017-05-16 12:35:28 UTC
Permalink
Post by robby
j'ai pas suivi tout le fil, mais une spline n'a aucune raison d'etre
monotone entre les deux tangentes.
Pour les splines monotones, voir :
<URL:https://en.wikipedia.org/wiki/I-spline>
--
Christophe Dang Ngoc Chan
François Guillet
2017-05-16 18:47:33 UTC
Permalink
Post by Christophe Dang Ngoc Chan
Post by robby
j'ai pas suivi tout le fil, mais une spline n'a aucune raison d'etre
monotone entre les deux tangentes.
<URL:https://en.wikipedia.org/wiki/I-spline>
J'en suis venu à utiliser des arcs de cercle entre sections linéaires :
Loading Image...

C'est ce qui semble le mieux pour l'effet cherché.

Ca avance mais encore des pbs dans mes équations. Ca parait simple, et
c'est tordu, ce n'est pas ça qui va me réconcilier avec la géométrie
:-(.
Christophe Dang Ngoc Chan
2017-05-17 16:43:19 UTC
Permalink
Post by François Guillet
http://exvacuo.free.fr/temp/arccercle.jpg
La dérivée seconde n'est donc pas continue.
Ce qui n'est pas forcément un problème, hein.

Par contre, ce qui risque d'être un problème, c'est que la solution avec
des arcs de cerce n'est pas unique donc tu peux difficilement automatiser.
--
Christophe Dang Ngoc Chan
François Guillet
2017-05-18 14:49:06 UTC
Permalink
Post by Christophe Dang Ngoc Chan
Post by François Guillet
http://exvacuo.free.fr/temp/arccercle.jpg
La dérivée seconde n'est donc pas continue.
Ce qui n'est pas forcément un problème, hein.
Par contre, ce qui risque d'être un problème, c'est que la solution avec des
arcs de cerce n'est pas unique donc tu peux difficilement automatiser.
J'ai eu de l'aide sur maths, un truc qui me semblait tout bête comme
obtenir la pente d'une bissectrice m'a donné du fil à retordre.
Maintenant l'implémentation marche mais il reste des problèmes (x3 trop
près du zéro).

J'ai bien sûr eu le problème que tu signales, il y a 2 solutions sur le
cercle pour x donné et la loi de Murphy a fait que celle que j'avais
choisie n'était pas la bonne.
L'application pratique fait que la solution est unique : p>=1, les
Xn>=0 et arc à prendre dans un quart de cercle bien déterminé par
rapport au centre.
Christophe Dang Ngoc Chan
2017-05-18 18:13:50 UTC
Permalink
Post by François Guillet
Post by Christophe Dang Ngoc Chan
Par contre, ce qui risque d'être un problème, c'est que la solution
avec des arcs de cerce n'est pas unique donc tu peux difficilement
automatiser.
[...]
J'ai bien sûr eu le problème que tu signales, il y a 2 solutions sur le
cercle pour x donné
Je ne pensais pas à ça.
Si tu prolonges les parties droites
(x3 augmente et x4 diminue),
tu peux toujours raccorder par des arcs de cercle.

Tu me diras, il suffit de dire que tu veux les arcs de cercle les plus
grands, mais pourquoi ?
--
Christophe Dang Ngoc Chan
François Guillet
2017-05-18 18:46:56 UTC
Permalink
Post by Christophe Dang Ngoc Chan
Post by François Guillet
Post by Christophe Dang Ngoc Chan
Par contre, ce qui risque d'être un problème, c'est que la solution
avec des arcs de cerce n'est pas unique donc tu peux difficilement
automatiser.
[...]
J'ai bien sûr eu le problème que tu signales, il y a 2 solutions sur le
cercle pour x donné
Je ne pensais pas à ça.
Si tu prolonges les parties droites
(x3 augmente et x4 diminue),
tu peux toujours raccorder par des arcs de cercle.
Tu me diras, il suffit de dire que tu veux les arcs de cercle les plus
grands, mais pourquoi ?
J'ai voulu que l'arc de cercle soit symétrique par rapport à la
bissectrice des 2 pentes arrivée/départ, c'est à dire que (x3,y3) soit
symétrique de (x1,y1) par rapport à elle :
http://exvacuo.free.fr/temp/arccercle.jpg

La pente des 2 droites étant fixée, cette symétrie fait que la solution
est alors unique, et cela détermine la position du point x3,y3.

Si l'on n'exige pas cette symétrie, les longueurs d'arc de chaque côté
de la bissectrice doivent pouvoir être fixées arbitrairement (donc
x3,y3), mais ça risque d'être au détriment de l'effet visuel. Il
faudrait essayer...

robby
2017-05-18 18:43:54 UTC
Permalink
Post by Christophe Dang Ngoc Chan
Post by François Guillet
http://exvacuo.free.fr/temp/arccercle.jpg
La dérivée seconde n'est donc pas continue.
Ce qui n'est pas forcément un problème, hein.
Par contre, ce qui risque d'être un problème, c'est que la solution avec
des arcs de cerce n'est pas unique donc tu peux difficilement automatiser.
comme je l'avais déjà proposé voici quelques semaines, dans la logique
de son appli, il peut décider d'une taille en x de marge d'adaptation
entre la partie zoommée et non zoommée.
--
Fabrice
Julien Arlandis
2017-05-05 19:46:14 UTC
Permalink
Post by François Guillet
C'est ce que j'ai utilisé pour le test. J'ai placé des barres vertes pour
visualiser l'effet, qui sont la transformation en y de points équidistants
http://exvacuo.free.fr/temp/x3.jpg
On voit qu'il y a un tassement normal plus on se rapproche de zéro et
l'ensemble est à peu près ce que je recherche.
Mais quand on arrive très près de zéro se produit un "détassement", les
barres vertes s'écartent à nouveau. Il faut vraiment choisir une pente p1
très petite (< 0.1) pour éliminer l'effet.
Donc ma fonction n'est pas monotone. Je ne vois pas pourquoi.
Affiche la dérivée de ta fonction, tu vas tout de suite comprendre ce qui se
passe.
Comme on pouvait s'y attendre, la dérivée entre (0,0) et (X1,Y1)
diminue puis remonte. Ceci ne se produit que lorsque la pente d'arrivée
est supérieure à 1.5 (celle de la loupe), sinon c'est bon.
Je ne sais si j'ai une erreur dans les équations ou si c'est un
problème d'implémentation.
Si au voisinage de l'origine ta courbe est convexe (elle passe sous la
tangente), cela traduit une diminution de la pente. Ensuite ta pente doit
forcément ré-augmenter vu que tu dois passer continûment d'une pente p1
à une pente p2 supérieure à p1. Ça explique le comportement de la
tangente.

Maintenant si tu veux une pente régulière au voisinage de 0, il te faut
rajouter une contrainte supplémentaire. Tu peux partir sur un polynome de
degré 4 et fixer un 3ème point (xp, yp) quelque part sur la tangente pas
très loin de l'origine.
Cela correspond au système suivant :
f(0) = 0
f(x1) = y1
f(xp) = yp
f'(0) = p1
f'(x1) = p2

avec yp = xp * p1
robby
2017-05-06 08:35:39 UTC
Permalink
Post by Julien Arlandis
Si au voisinage de l'origine ta courbe est convexe (elle passe sous la
tangente), cela traduit une diminution de la pente. Ensuite ta pente
doit forcément ré-augmenter vu que tu dois passer continûment d'une
pente p1 à une pente p2 supérieure à p1. Ça explique le comportement de
la tangente.
Maintenant si tu veux une pente régulière au voisinage de 0, il te faut
rajouter une contrainte supplémentaire. Tu peux partir sur un polynome
de degré 4 et fixer un 3ème point (xp, yp) quelque part sur la tangente
pas très loin de l'origine.
non, ça n'est pas la qu'est le probleme.
il manque soit la notion de tension de courbe (en passant par des
splines 2D, des NURBS ou autre), soit la notion de contrainte de pente
min (voir mon post précédent).
--
Fabrice
François Guillet
2017-05-06 09:41:51 UTC
Permalink
Post by robby
Post by Julien Arlandis
Si au voisinage de l'origine ta courbe est convexe (elle passe sous la
tangente), cela traduit une diminution de la pente. Ensuite ta pente
doit forcément ré-augmenter vu que tu dois passer continûment d'une
pente p1 à une pente p2 supérieure à p1. Ça explique le comportement de
la tangente.
Maintenant si tu veux une pente régulière au voisinage de 0, il te faut
rajouter une contrainte supplémentaire. Tu peux partir sur un polynome
de degré 4 et fixer un 3ème point (xp, yp) quelque part sur la tangente
pas très loin de l'origine.
non, ça n'est pas la qu'est le probleme.
il manque soit la notion de tension de courbe (en passant par des splines 2D,
des NURBS ou autre), soit la notion de contrainte de pente min (voir mon post
précédent).
Oui. Je me suis aperçu que même avec un polynôme de degré 2 il y a des
solutions, mais pas pour toutes les pentes d'arrivée. Idem pour le
degré 3. Le degré 4, ce sera sûrement pareil.

En fait il faut partir de l'équation de la pente (on aura la courbe en
prenant l'intégrale, c'est plus simple pour trouver les paramètres).

on a :

(1) p(0) = p0 pente de départ à déterminer en fonction de la pente p1
d'arrivée qui est fixée et de (x1,y1) qu'on suppose toujours > à (0,0)

(2) p(x1) = p1 la pente de la loupe à rejoindre

(3) p0 =< p1 sinon la courbe ne sera pas monotone, il faudra rattraper
une pente trop raide au départ

(4) p1=1 => p0=1 car on doit retrouver la droite y=x quand l'effet
loupe est réduit à 0, c'est à dire sa pente = 1.

Si l'on prend p(x)=a*x+b (on aura la courbe en polynôme du second
degré) et qu'on exprime a et b en fonction de p0, p1, x1, on trouve une
contrainte sur p1 pour que la solution existe, qui ne peut être
toujours vérifiée car p1 peut varier dans de très grandes proportions.
Itou pour le 3ème degré...

Mais il reste de nombreux choix possibles pour une solution de p1=1 à
p1 quasi infini (vertical). Je me demande par exemple si une portion
d'ellipse ne conviendrait pas.
robby
2017-04-30 17:30:00 UTC
Permalink
Post by François Guillet
Je cherche l'arc de cercle dont la corde est (0,0) (x1,y1) pour la
première courbe, et (x2,y2) (1,1) pour la seconde, et qui soit tangeant
à ma droite de pente p, respectivement en (x1,y1), et (x2,y2).
aucune chance d'un cercle passant par (x1,y1) avec une pente p passe
aussi par zero.
Et si c'etait le cas, tu n'y controlerait pas sa pente (qui pourrait
meme etre negative).
--
Fabrice
François Guillet
2017-05-01 09:48:48 UTC
Permalink
Post by François Guillet
Je cherche l'arc de cercle dont la corde est (0,0) (x1,y1) pour la
première courbe, et (x2,y2) (1,1) pour la seconde, et qui soit tangeant
à ma droite de pente p, respectivement en (x1,y1), et (x2,y2).
aucune chance d'un cercle passant par (x1,y1) avec une pente p passe aussi
par zero.
Et si c'etait le cas, tu n'y controlerait pas sa pente (qui pourrait meme
etre negative).
Si, il y a une solution, voir par exemple ici, construite grossièrement
au compas :
Loading Image...

Normalement p>1. Si p=1 on a un cercle de rayon infini, c'est à dire
qu'on retrouve la droite de pente 1. Si p<1 (cas non utilisé en
pratique), l'arc serait orienté dans l'autre sens.
Je ne suis pas sûr qu'il y ait des solutions dans tous les cas, je vais
donc voir les limites.

Equation du cercle, de centre (a,b) : (x – a)² + (y – b)² = r²
soit (y-b)² = r² - (x-a)²

y = (r² - (x-a)²)^0.5 + b
y' = (-x+a)/(r² - (x-a)²)^0.5 (sauf erreur...)

avec les contraintes qu'il me reste à résoudre pour fixer a,b,r en
fonction de x1, x0, p:
(1) a² + b² = r²
(2) (x1 – a)² + (y1 – b)² = r² avec y1 = x0 - p*(x0-x1)
(3) (-x1+a)/(r² - (x1-a)²)^0.5 = p
robby
2017-05-01 11:04:31 UTC
Permalink
Post by François Guillet
Si, il y a une solution
ah oui tien, j'ai dit une bétise.
Centre du cercle = intersection entre la médiatrice a la corde et la
normale au point de tangence.

mais comme je disais, tu peux te retrouver avec une pente nulle ou
négative en 0.
--
Fabrice
François Guillet
2017-05-01 13:21:06 UTC
Permalink
Post by robby
Post by François Guillet
Si, il y a une solution
ah oui tien, j'ai dit une bétise.
Centre du cercle = intersection entre la médiatrice a la corde et la normale
au point de tangence.
mais comme je disais, tu peux te retrouver avec une pente nulle ou négative
en 0.
il me semble aussi que oui, si y1 est trop petit par rapport à x1.
Mais en pratique y1 ne sera pas inférieur à (y2-y1) : on a une marge
minimale entre 0,0 et le début de loupe, qui est égale à la largeur de
loupe.
Ceci est fait pour une toute autre raison que la visualisation : éviter
que l'utilisateur ait à travailler dans une zone de loupe trop près du
zéro (la gauche du graphe), ce qui correspond à une zone où les effets
du filtre de bande du spectre radio reçu se font sentir. Dans ce cas on
recadre automatiquement la vue vers la droite en augmentant la
fréquence de début du spectre reçu (idem vers la gauche si on est trop
à droite). C'est pourquoi j'étais plutôt optimiste sur le fait de
trouver une solution avec mes arcs de cercles.
Christophe Dang Ngoc Chan
2017-05-02 12:05:32 UTC
Permalink
Post by robby
Post by François Guillet
Si, il y a une solution
ah oui tien, j'ai dit une bétise.
Centre du cercle = intersection entre la médiatrice a la corde et la
normale au point de tangence.
En revanche, il n'y a pas continuité de la courbure.
En mécanique, ça veut dire un a-coup (jerk) infini : dans le référentiel
lié au mobile, on a une disparition brusque de la force centrifuge.
--
Christophe Dang Ngoc Chan
Maboule
2017-04-28 16:35:46 UTC
Permalink
Post by François Guillet
Pour la représentation graphique d'une valeur X variant entre 0 et 1,
j'ai besoin d'effectuer un effet de loupe sur une partie de la plage,
disons entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de
la loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1).
Contrainte : la pente p de ces courbes en x1 et en x2 devra être égale à
p pour faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Cela ressemble très fortement à la courbe d'une triode.
Si tu veux en savoir plus, tu consultes Monsieur Gogol :-)
Paul Aubrin
2017-04-29 11:02:28 UTC
Permalink
Post by François Guillet
Pour la représentation graphique d'une valeur X variant entre 0 et 1,
j'ai besoin d'effectuer un effet de loupe sur une partie de la plage,
disons entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de
la loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1). Contrainte
: la pente p de ces courbes en x1 et en x2 devra être égale à p pour
faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Une courbe de Bézier avec pour points directeurs (0,0), (x0,y0) et
l'intersection de la droite de pente p avec l'axe des x, pour la partie
du bas, et idem pour le haut?

http://ljk.imag.fr/membres/Bernard.Ycart/mel/cs/node14.html
François Guillet
2017-04-29 13:50:04 UTC
Permalink
Post by Paul Aubrin
Post by François Guillet
Pour la représentation graphique d'une valeur X variant entre 0 et 1,
j'ai besoin d'effectuer un effet de loupe sur une partie de la plage,
disons entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de
la loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1). Contrainte
Post by François Guillet
la pente p de ces courbes en x1 et en x2 devra être égale à p pour
faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Une courbe de Bézier avec pour points directeurs (0,0), (x0,y0) et
l'intersection de la droite de pente p avec l'axe des x, pour la partie
du bas, et idem pour le haut?
http://ljk.imag.fr/membres/Bernard.Ycart/mel/cs/node14.html
Ca a l'air plus lourd que l'autre solution pour le cas décrit, du fait
que je n'ai que 2 points à considérer.
Par contre j'ai un autre problème sous le coude, le lissage de ce genre
de représentation :
Loading Image...
On voit que mon liseret blanc en haut est tout anguleux, c'est moche.
Ces courbes de Bézier ont l'air une bonne approche, je garde, merci.
Julien Arlandis
2017-04-29 15:27:15 UTC
Permalink
Post by François Guillet
Post by Paul Aubrin
Post by François Guillet
Pour la représentation graphique d'une valeur X variant entre 0 et 1,
j'ai besoin d'effectuer un effet de loupe sur une partie de la plage,
disons entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de
la loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1). Contrainte
Post by François Guillet
la pente p de ces courbes en x1 et en x2 devra être égale à p pour
faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Une courbe de Bézier avec pour points directeurs (0,0), (x0,y0) et
l'intersection de la droite de pente p avec l'axe des x, pour la partie
du bas, et idem pour le haut?
http://ljk.imag.fr/membres/Bernard.Ycart/mel/cs/node14.html
Ca a l'air plus lourd que l'autre solution pour le cas décrit, du fait
que je n'ai que 2 points à considérer.
Par contre j'ai un autre problème sous le coude, le lissage de ce genre
http://exvacuo.free.fr/temp/lw.jpg
On voit que mon liseret blanc en haut est tout anguleux, c'est moche.
Ces courbes de Bézier ont l'air une bonne approche, je garde, merci.
Pour lisser une courbe, tu as deux approches.
La première consiste à faire la transformée de fourrier discrète de
ton signal, d'annuler les coefficients qui correspondent aux hautes
fréquences et de refaire une transformée de fourrier inverse. Plus tu
auras supprimé des haute fréquences, plus lisse sera ta courbe.

La deuxième méthode, plus facile à comprendre c'est d'appliquer à ton
signal un filtre gaussien, il te suffit de convoluer ta fonction de
départ avec une fonction gaussienne. Plus grand sera l'écart type de ta
gaussienne, plus lisse sera ta courbe.

Pour prototyper très rapidement ce genre de choses il te faut des
logiciels comme octave ou scilab, et quand tu es satisfait du résultat tu
implémentes en C.
Julien Arlandis
2017-04-29 15:27:47 UTC
Permalink
Post by François Guillet
Post by Paul Aubrin
Post by François Guillet
Pour la représentation graphique d'une valeur X variant entre 0 et 1,
j'ai besoin d'effectuer un effet de loupe sur une partie de la plage,
disons entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de
la loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1). Contrainte
Post by François Guillet
la pente p de ces courbes en x1 et en x2 devra être égale à p pour
faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Une courbe de Bézier avec pour points directeurs (0,0), (x0,y0) et
l'intersection de la droite de pente p avec l'axe des x, pour la partie
du bas, et idem pour le haut?
http://ljk.imag.fr/membres/Bernard.Ycart/mel/cs/node14.html
Ca a l'air plus lourd que l'autre solution pour le cas décrit, du fait
que je n'ai que 2 points à considérer.
Par contre j'ai un autre problème sous le coude, le lissage de ce genre
http://exvacuo.free.fr/temp/lw.jpg
On voit que mon liseret blanc en haut est tout anguleux, c'est moche.
Ces courbes de Bézier ont l'air une bonne approche, je garde, merci.
Pour lisser une courbe, tu as deux approches.
La première consiste à faire la transformée de fourrier discrète de
ton signal, d'annuler les coefficients qui correspondent aux hautes
fréquences et de refaire une transformée de fourrier inverse. Plus tu
auras supprimé des hautes fréquences, plus lisse sera ta courbe.

La deuxième méthode, plus facile à comprendre c'est d'appliquer à ton
signal un filtre gaussien, il te suffit de convoluer ta fonction de
départ avec une fonction gaussienne. Plus grand sera l'écart type de ta
gaussienne, plus lisse sera ta courbe.

Pour prototyper très rapidement ce genre de choses il te faut des
logiciels comme octave ou scilab, et quand tu es satisfait du résultat tu
implémentes en C.
François Guillet
2017-04-29 16:57:47 UTC
Permalink
Post by Julien Arlandis
Post by Paul Aubrin
Post by François Guillet
Pour la représentation graphique d'une valeur X variant entre 0 et 1,
j'ai besoin d'effectuer un effet de loupe sur une partie de la plage,
disons entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de
la loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1). Contrainte
Post by François Guillet
la pente p de ces courbes en x1 et en x2 devra être égale à p pour
faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Une courbe de Bézier avec pour points directeurs (0,0), (x0,y0) et
l'intersection de la droite de pente p avec l'axe des x, pour la partie du
bas, et idem pour le haut?
http://ljk.imag.fr/membres/Bernard.Ycart/mel/cs/node14.html
Ca a l'air plus lourd que l'autre solution pour le cas décrit, du fait que
je n'ai que 2 points à considérer.
Par contre j'ai un autre problème sous le coude, le lissage de ce genre de
http://exvacuo.free.fr/temp/lw.jpg
On voit que mon liseret blanc en haut est tout anguleux, c'est moche. Ces
courbes de Bézier ont l'air une bonne approche, je garde, merci.
Pour lisser une courbe, tu as deux approches.
La première consiste à faire la transformée de fourrier discrète de ton
signal, d'annuler les coefficients qui correspondent aux hautes fréquences et
de refaire une transformée de fourrier inverse. Plus tu auras supprimé des
hautes fréquences, plus lisse sera ta courbe.
La deuxième méthode, plus facile à comprendre c'est d'appliquer à ton signal
un filtre gaussien, il te suffit de convoluer ta fonction de départ avec une
fonction gaussienne. Plus grand sera l'écart type de ta gaussienne, plus
lisse sera ta courbe.
Pour prototyper très rapidement ce genre de choses il te faut des logiciels
comme octave ou scilab, et quand tu es satisfait du résultat tu implémentes
en C.
En fait ce qu'on voit dans le lien au-dessus, c'est déjà la sortie
d'une transformée de Fourrier : le spectre de la bande radio des ondes
longues (les modules des échantillons fréquentiels).
Donc il faudrait faire une seconde FFT de ces modules, RAZ des
fréquences élevées, FFT inverse, et le tour est joué. Il faut que je
vois le temps de calcul car l'appli est en temps réel, mais utiliser
les FFT m'irait bien, elles sont déjà prêtes, j'en ai fait une classe.
Et il me semble qu'une convolution, là je ne maîtrise pas, c'est lourd
aussi en calcul, non ?
Julien Arlandis
2017-04-29 17:14:30 UTC
Permalink
Post by François Guillet
Post by Julien Arlandis
Post by Paul Aubrin
Post by François Guillet
Pour la représentation graphique d'une valeur X variant entre 0 et 1,
j'ai besoin d'effectuer un effet de loupe sur une partie de la plage,
disons entre 2 points x1 et x2.
A chaque valeur x, je fais donc correspondre une valeur y entre 0 et 1
aussi, celle que le graphe représentera.
La zone de loupe est linéaire, de pente imposée p >= 1. Le centre x0 de
la loupe est également imposé, et il est tel que y0=x0.
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1). Contrainte
Post by François Guillet
la pente p de ces courbes en x1 et en x2 devra être égale à p pour
faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Les solutions ne sont pas uniques.
Une idée de ce qu'on pourrait prendre ?
Une courbe de Bézier avec pour points directeurs (0,0), (x0,y0) et
l'intersection de la droite de pente p avec l'axe des x, pour la partie du
bas, et idem pour le haut?
http://ljk.imag.fr/membres/Bernard.Ycart/mel/cs/node14.html
Ca a l'air plus lourd que l'autre solution pour le cas décrit, du fait que
je n'ai que 2 points à considérer.
Par contre j'ai un autre problème sous le coude, le lissage de ce genre de
http://exvacuo.free.fr/temp/lw.jpg
On voit que mon liseret blanc en haut est tout anguleux, c'est moche. Ces
courbes de Bézier ont l'air une bonne approche, je garde, merci.
Pour lisser une courbe, tu as deux approches.
La première consiste à faire la transformée de fourrier discrète de ton
signal, d'annuler les coefficients qui correspondent aux hautes fréquences et
de refaire une transformée de fourrier inverse. Plus tu auras supprimé des
hautes fréquences, plus lisse sera ta courbe.
La deuxième méthode, plus facile à comprendre c'est d'appliquer à ton signal
un filtre gaussien, il te suffit de convoluer ta fonction de départ avec une
fonction gaussienne. Plus grand sera l'écart type de ta gaussienne, plus
lisse sera ta courbe.
Pour prototyper très rapidement ce genre de choses il te faut des logiciels
comme octave ou scilab, et quand tu es satisfait du résultat tu implémentes
en C.
En fait ce qu'on voit dans le lien au-dessus, c'est déjà la sortie
d'une transformée de Fourrier : le spectre de la bande radio des ondes
longues (les modules des échantillons fréquentiels).
Donc il faudrait faire une seconde FFT de ces modules, RAZ des
fréquences élevées, FFT inverse, et le tour est joué. Il faut que je
vois le temps de calcul car l'appli est en temps réel, mais utiliser
les FFT m'irait bien, elles sont déjà prêtes, j'en ai fait une classe.
Et il me semble qu'une convolution, là je ne maîtrise pas, c'est lourd
aussi en calcul, non ?
Pour un système temps réel, je ne sais pas ce qui est le plus adapté.
Une convolution simple consisterait à moyenner f(t) par les N mesures
précédentes et suivantes avec un poids gaussien, c'est relativement
rapide à traiter.

http://www.f-legrand.fr/scidoc/docimg/numerique/filtre/filtrenum/filtrenum.html
Paul Aubrin
2017-04-29 20:25:36 UTC
Permalink
Post by Julien Arlandis
Pour prototyper très rapidement ce genre de choses il te faut des
logiciels comme octave ou scilab, et quand tu es satisfait du résultat
tu implémentes en C.
En fait ce qu'on voit dans le lien au-dessus, c'est déjà la sortie d'une
transformée de Fourrier : le spectre de la bande radio des ondes longues
(les modules des échantillons fréquentiels).
Le filtrage passe-bas du pauvre consiste à faire plusieurs fois la
moyenne glissante avec deux largeurs différentes par exemple 10 et 12
éléments. Dans l'espace des fréquences, la moyenne, qui est un créneau
dans l'espace des temps, convolue le signal avec un signal en forme de
(sin(x)/x)². Une seule moyenne a tendance à créer des périodicités. La
deuxième, choisie pour que son premier zéro annule le premier rebond de
la première moyenne, crée un filtre passe-bas simple et très efficace.

Exemple:
Non filtré
http://woodfortrees.org/plot/hadcrut4gl
Filtré par une double moyenne
http://woodfortrees.org/plot/hadcrut4gl/mean:20/mean:24

http://woodfortrees.org/plot/hadcrut4gl/mean:10/mean:12/mean:15
Paul Aubrin
2017-04-29 21:01:14 UTC
Permalink
Post by Julien Arlandis
Pour prototyper très rapidement ce genre de choses il te faut des
logiciels comme octave ou scilab, et quand tu es satisfait du résultat
tu implémentes en C.
En fait ce qu'on voit dans le lien au-dessus, c'est déjà la sortie d'une
transformée de Fourrier : le spectre de la bande radio des ondes longues
(les modules des échantillons fréquentiels).
Le filtrage passe-bas du pauvre consiste à faire plusieurs fois la moyenne
glissante avec deux largeurs différentes par exemple 10 et 12 éléments.
Dans l'espace des fréquences, la moyenne, qui est un créneau dans l'espace
des temps, multiplie le signal (en fréquence) avec un signal en forme de
(sin(x)/x)². Une seule moyenne a tendance à créer des périodicités. La
deuxième, choisie pour que son premier zéro annule le premier rebond de
la première moyenne, crée un filtre passe-bas simple et très efficace.

Exemple:
Non filtré http://woodfortrees.org/plot/hadcrut4gl Filtré par une double
moyenne http://woodfortrees.org/plot/hadcrut4gl/mean:20/mean:24

http://woodfortrees.org/plot/hadcrut4gl/mean:10/mean:12/mean:15
François Guillet
2017-04-30 08:36:21 UTC
Permalink
Post by Paul Aubrin
Post by Julien Arlandis
Pour prototyper très rapidement ce genre de choses il te faut des
logiciels comme octave ou scilab, et quand tu es satisfait du résultat
tu implémentes en C.
En fait ce qu'on voit dans le lien au-dessus, c'est déjà la sortie d'une
transformée de Fourrier : le spectre de la bande radio des ondes longues
(les modules des échantillons fréquentiels).
Le filtrage passe-bas du pauvre consiste à faire plusieurs fois la moyenne
glissante avec deux largeurs différentes par exemple 10 et 12 éléments.
Dans l'espace des fréquences, la moyenne, qui est un créneau dans l'espace
des temps, multiplie le signal (en fréquence) avec un signal en forme de
(sin(x)/x)². Une seule moyenne a tendance à créer des périodicités. La
deuxième, choisie pour que son premier zéro annule le premier rebond de
la première moyenne, crée un filtre passe-bas simple et très efficace.
Non filtré http://woodfortrees.org/plot/hadcrut4gl Filtré par une double
moyenne http://woodfortrees.org/plot/hadcrut4gl/mean:20/mean:24
http://woodfortrees.org/plot/hadcrut4gl/mean:10/mean:12/mean:15
Ok. Ca rejoint la réponse de Julien.
Les moyennes glissantes sont faciles à faire et coûtent peu. A chaque
pas, on ajoute la nouvelle valeur à la série et on retranche la
première : 2 additions, une division.

sin(x)/x c'est à peu près ce que j'utilise pour le fenêtrage par défaut
de ma FFT (fenêtre de Hanning). J'avais oublié le rapport avec la
convolution :-(, comme Mr Jourdain qui fait de la prose sans le
savoir...

J'ai donc tous les éléments maintenant pour améliorer mon graphe et je
m'y mettrai après l'implémentation de la loupe.

Merci à tous les deux.
Christophe Dang Ngoc Chan
2017-04-30 20:11:39 UTC
Permalink
Bonjour,
Post by François Guillet
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1).
Contrainte : la pente p de ces courbes en x1 et en x2 devra être égale à
p pour faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Définir "plus douces".

Tu peux regarder du côté de la cinématique,
typiquement je veux aller de a à b en un temps t.

Tu veux un raccordement des tangentes, "douce" ça veut dire que tu veux
aussi un raccordement des courbures ?
Donc une continuité de la dérivée seconde ?

Après, il faut vor ce que tu veux limiter : la dérivée, la dérivée
seconde, la dérivée 3e...

En mécanique, ça veut dire arbitrer entre une vitesse modérée, une
accélération modérée, un à-coup (jerk) modéré...

Regarde la différence entre x^2, x^4 et tan(x) autour de 0+ pour avoir
une idée des différences.
--
Christophe Dang Ngoc Chan
François Guillet
2017-05-01 15:20:02 UTC
Permalink
Post by Christophe Dang Ngoc Chan
Bonjour,
Post by François Guillet
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1).
Contrainte : la pente p de ces courbes en x1 et en x2 devra être égale à
p pour faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Définir "plus douces".
Tu peux regarder du côté de la cinématique,
typiquement je veux aller de a à b en un temps t.
Tu veux un raccordement des tangentes, "douce" ça veut dire que tu veux aussi
un raccordement des courbures ?
Probablement.
Post by Christophe Dang Ngoc Chan
Donc une continuité de la dérivée seconde ?
Probablement.
Post by Christophe Dang Ngoc Chan
Après, il faut vor ce que tu veux limiter : la dérivée, la dérivée seconde,
la dérivée 3e...
Si je savais exactement formuler mathématiquement ce que je souhaite,
je n'aurai pas mis fsp en copie.
Là je ne suis même pas sûr de ce qui est le mieux. Il faut représenter
des données dans un graphe, il y a des questions d'ergonomie, je
tatonne.
Mon dernier petit dessin aidera peut-être :
http://exvacuo.free.fr/temp/courbe4.jpg
Post by Christophe Dang Ngoc Chan
En mécanique, ça veut dire arbitrer entre une vitesse modérée, une
accélération modérée, un à-coup (jerk) modéré...
Regarde la différence entre x^2, x^4 et tan(x) autour de 0+ pour avoir une
idée des différences.
Julien Arlandis
2017-05-01 15:41:16 UTC
Permalink
Post by François Guillet
Post by Christophe Dang Ngoc Chan
Bonjour,
Post by François Guillet
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1).
Contrainte : la pente p de ces courbes en x1 et en x2 devra être égale à
p pour faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Définir "plus douces".
Tu peux regarder du côté de la cinématique,
typiquement je veux aller de a à b en un temps t.
Tu veux un raccordement des tangentes, "douce" ça veut dire que tu veux aussi
un raccordement des courbures ?
Probablement.
Post by Christophe Dang Ngoc Chan
Donc une continuité de la dérivée seconde ?
Probablement.
Post by Christophe Dang Ngoc Chan
Après, il faut vor ce que tu veux limiter : la dérivée, la dérivée seconde,
la dérivée 3e...
Si je savais exactement formuler mathématiquement ce que je souhaite,
je n'aurai pas mis fsp en copie.
Là je ne suis même pas sûr de ce qui est le mieux. Il faut représenter
des données dans un graphe, il y a des questions d'ergonomie, je
tatonne.
http://exvacuo.free.fr/temp/courbe4.jpg
J'ai l'impression que tu cherches à minimiser la longueur de la courbe.
Un moyen d'y parvenir serait de paramétrer ta courbe en fonction de ta
seconde pente p, et de chercher la valeur de p pour laquelle la longueur
de la courbe est minimale.

Nous avions à résoudre le système AX = B(p) avec X=[a, b, c, d]' et
B(p)=[y(x0), y(x1), p, p1]
avec X(p) = A^-1 B(p)

Avec ça tu vas pouvoir représenter ta courbe comme une fonction
y(x,p) = a(p) * x³ + b(p) x² + c(p) x + d(p)
qui aura pour longueur
L(p) = integrate (sqrt(1 + y'(x,p)² dx)
François Guillet
2017-05-02 07:26:18 UTC
Permalink
Post by Julien Arlandis
Post by François Guillet
Post by Christophe Dang Ngoc Chan
Bonjour,
Post by François Guillet
http://exvacuo.free.fr/temp/courbe.jpg
trouver les 2 courbes en vert les plus "douces" possibles pour relier
respectivement les points (0,0) à (x1,y1) et (x2,y2) à (1,1).
Contrainte : la pente p de ces courbes en x1 et en x2 devra être égale à
p pour faire la continuité avec la droite de pente p.
Par contre les pentes de chaque courbe en (0,0) et en (1,1) n'ont pas à
être obligatoirement horizontales.
Définir "plus douces".
Tu peux regarder du côté de la cinématique,
typiquement je veux aller de a à b en un temps t.
Tu veux un raccordement des tangentes, "douce" ça veut dire que tu veux
aussi un raccordement des courbures ?
Probablement.
Post by Christophe Dang Ngoc Chan
Donc une continuité de la dérivée seconde ?
Probablement.
Post by Christophe Dang Ngoc Chan
Après, il faut vor ce que tu veux limiter : la dérivée, la dérivée seconde,
la dérivée 3e...
Si je savais exactement formuler mathématiquement ce que je souhaite, je
n'aurai pas mis fsp en copie.
Là je ne suis même pas sûr de ce qui est le mieux. Il faut représenter des
données dans un graphe, il y a des questions d'ergonomie, je tatonne.
http://exvacuo.free.fr/temp/courbe4.jpg
J'ai l'impression que tu cherches à minimiser la longueur de la courbe.
Un moyen d'y parvenir serait de paramétrer ta courbe en fonction de ta
seconde pente p, et de chercher la valeur de p pour laquelle la longueur de
la courbe est minimale.
Oui, il me semble que c'est bien ça.
Post by Julien Arlandis
Nous avions à résoudre le système AX = B(p) avec X=[a, b, c, d]' et
B(p)=[y(x0), y(x1), p, p1]
avec X(p) = A^-1 B(p)
Avec ça tu vas pouvoir représenter ta courbe comme une fonction
y(x,p) = a(p) * x³ + b(p) x² + c(p) x + d(p)
qui aura pour longueur
L(p) = integrate (sqrt(1 + y'(x,p)² dx)
Je m'y remets...
Paul Aubrin
2017-05-02 17:44:29 UTC
Permalink
Post by François Guillet
Post by Julien Arlandis
J'ai l'impression que tu cherches à minimiser la longueur de la courbe.
Un moyen d'y parvenir serait de paramétrer ta courbe en fonction de ta
seconde pente p, et de chercher la valeur de p pour laquelle la
longueur de la courbe est minimale.
Oui, il me semble que c'est bien ça.
Post by Julien Arlandis
Nous avions à résoudre le système AX = B(p) avec X=[a, b, c, d]' et
B(p)=[y(x0), y(x1), p, p1]
avec X(p) = A^-1 B(p)
Avec ça tu vas pouvoir représenter ta courbe comme une fonction y(x,p)
= a(p) * x³ + b(p) x² + c(p) x + d(p)
qui aura pour longueur L(p) = integrate (sqrt(1 + y'(x,p)² dx)
Je m'y remets...
J'ai essayé de voir ce que donnerait l'utilisation de courbes de Beziers
avec libre-office draw. Le résultat ressemblait énormément au résultat
recherché.
François Guillet
2017-05-02 19:50:12 UTC
Permalink
Post by Paul Aubrin
Post by François Guillet
Post by Julien Arlandis
J'ai l'impression que tu cherches à minimiser la longueur de la courbe.
Un moyen d'y parvenir serait de paramétrer ta courbe en fonction de ta
seconde pente p, et de chercher la valeur de p pour laquelle la
longueur de la courbe est minimale.
Oui, il me semble que c'est bien ça.
Post by Julien Arlandis
Nous avions à résoudre le système AX = B(p) avec X=[a, b, c, d]' et
B(p)=[y(x0), y(x1), p, p1]
avec X(p) = A^-1 B(p)
Avec ça tu vas pouvoir représenter ta courbe comme une fonction y(x,p)
= a(p) * x³ + b(p) x² + c(p) x + d(p)
qui aura pour longueur L(p) = integrate (sqrt(1 + y'(x,p)² dx)
Je m'y remets...
J'ai essayé de voir ce que donnerait l'utilisation de courbes de Beziers
avec libre-office draw. Le résultat ressemblait énormément au résultat
recherché.
Et oui. Coincidence, je viens à l'instant de découvrir que Paint en
utilise une aussi quand on choisit l'outil "Courbe".

J'ai donc fait l'essai avec Paint en traçant la droite de (0,0) à
(1,1), puis en la courbant au pif en deux endroits, et ça colle
effectivement très bien, la partie centrale approchant de près la zone
rectiligne, ce qui permettrait de s'éviter la complication du
raccordement.
C'est la ligne en rouge que j'ai superposé sur mon 1er schéma :
Loading Image...

Comme on fixe 4 points, l'équation est a priori celle de degré 3 :
B(t) = P0(1-t)^3 + 3*P1*t*(t-2)^2 + 3*P2*t^2*(1-t) + p3*t^3 avec t de 0
à 1

Maintenant il faut que je comprenne comment relier ces points de
contrôle à mes propres contraintes (centre (x0,y0) de la loupe sur la
droite de pente 1, et pente p imposée à cet endroit).
Paul Aubrin
2017-05-03 05:24:13 UTC
Permalink
Post by François Guillet
Post by Paul Aubrin
Post by François Guillet
Post by Julien Arlandis
J'ai l'impression que tu cherches à minimiser la longueur de la courbe.
Un moyen d'y parvenir serait de paramétrer ta courbe en fonction de
ta seconde pente p, et de chercher la valeur de p pour laquelle la
longueur de la courbe est minimale.
Oui, il me semble que c'est bien ça.
Post by Julien Arlandis
Nous avions à résoudre le système AX = B(p) avec X=[a, b, c, d]' et
B(p)=[y(x0), y(x1), p, p1]
avec X(p) = A^-1 B(p)
Avec ça tu vas pouvoir représenter ta courbe comme une fonction y(x,p)
= a(p) * x³ + b(p) x² + c(p) x + d(p)
qui aura pour longueur L(p) = integrate (sqrt(1 + y'(x,p)² dx)
Je m'y remets...
J'ai essayé de voir ce que donnerait l'utilisation de courbes de
Beziers avec libre-office draw. Le résultat ressemblait énormément au
résultat recherché.
Et oui. Coincidence, je viens à l'instant de découvrir que Paint en
utilise une aussi quand on choisit l'outil "Courbe".
J'ai donc fait l'essai avec Paint en traçant la droite de (0,0) à (1,1),
puis en la courbant au pif en deux endroits, et ça colle effectivement
très bien, la partie centrale approchant de près la zone rectiligne, ce
qui permettrait de s'éviter la complication du raccordement.
http://exvacuo.free.fr/temp/courbe5.jpg
Comme on fixe 4 points, l'équation est a priori celle de degré 3 : B(t)
= P0(1-t)^3 + 3*P1*t*(t-2)^2 + 3*P2*t^2*(1-t) + p3*t^3 avec t de 0 à 1
Maintenant il faut que je comprenne comment relier ces points de
contrôle à mes propres contraintes (centre (x0,y0) de la loupe sur la
droite de pente 1, et pente p imposée à cet endroit).
P(t)=(x0,y0)(1-t)^2+2t(x1,y0)+(x1,y1)t^2 ?
François Guillet
2017-05-03 07:41:33 UTC
Permalink
Post by Paul Aubrin
Post by François Guillet
Post by Paul Aubrin
Post by François Guillet
Post by Julien Arlandis
J'ai l'impression que tu cherches à minimiser la longueur de la courbe.
Un moyen d'y parvenir serait de paramétrer ta courbe en fonction de
ta seconde pente p, et de chercher la valeur de p pour laquelle la
longueur de la courbe est minimale.
Oui, il me semble que c'est bien ça.
Post by Julien Arlandis
Nous avions à résoudre le système AX = B(p) avec X=[a, b, c, d]' et
B(p)=[y(x0), y(x1), p, p1]
avec X(p) = A^-1 B(p)
Avec ça tu vas pouvoir représenter ta courbe comme une fonction y(x,p)
= a(p) * x³ + b(p) x² + c(p) x + d(p)
qui aura pour longueur L(p) = integrate (sqrt(1 + y'(x,p)² dx)
Je m'y remets...
J'ai essayé de voir ce que donnerait l'utilisation de courbes de
Beziers avec libre-office draw. Le résultat ressemblait énormément au
résultat recherché.
Et oui. Coincidence, je viens à l'instant de découvrir que Paint en
utilise une aussi quand on choisit l'outil "Courbe".
J'ai donc fait l'essai avec Paint en traçant la droite de (0,0) à (1,1),
puis en la courbant au pif en deux endroits, et ça colle effectivement
très bien, la partie centrale approchant de près la zone rectiligne, ce
qui permettrait de s'éviter la complication du raccordement.
http://exvacuo.free.fr/temp/courbe5.jpg
Comme on fixe 4 points, l'équation est a priori celle de degré 3 : B(t)
= P0(1-t)^3 + 3*P1*t*(t-2)^2 + 3*P2*t^2*(1-t) + p3*t^3 avec t de 0 à 1
Maintenant il faut que je comprenne comment relier ces points de
contrôle à mes propres contraintes (centre (x0,y0) de la loupe sur la
droite de pente 1, et pente p imposée à cet endroit).
P(t)=(x0,y0)(1-t)^2+2t(x1,y0)+(x1,y1)t^2 ?
Ca m'a l'air plus complex. Je viens de lire ça :
www.cad.zju.edu.cn/home/zhx/GM/009/00-bsia.pdf
ça refroidit...
François Guillet
2017-05-03 08:08:47 UTC
Permalink
Post by Paul Aubrin
Post by François Guillet
Post by Paul Aubrin
Post by François Guillet
Post by Julien Arlandis
J'ai l'impression que tu cherches à minimiser la longueur de la courbe.
Un moyen d'y parvenir serait de paramétrer ta courbe en fonction de
ta seconde pente p, et de chercher la valeur de p pour laquelle la
longueur de la courbe est minimale.
Oui, il me semble que c'est bien ça.
Post by Julien Arlandis
Nous avions à résoudre le système AX = B(p) avec X=[a, b, c, d]' et
B(p)=[y(x0), y(x1), p, p1]
avec X(p) = A^-1 B(p)
Avec ça tu vas pouvoir représenter ta courbe comme une fonction y(x,p)
= a(p) * x³ + b(p) x² + c(p) x + d(p)
qui aura pour longueur L(p) = integrate (sqrt(1 + y'(x,p)² dx)
Je m'y remets...
J'ai essayé de voir ce que donnerait l'utilisation de courbes de
Beziers avec libre-office draw. Le résultat ressemblait énormément au
résultat recherché.
Et oui. Coincidence, je viens à l'instant de découvrir que Paint en
utilise une aussi quand on choisit l'outil "Courbe".
J'ai donc fait l'essai avec Paint en traçant la droite de (0,0) à (1,1),
puis en la courbant au pif en deux endroits, et ça colle effectivement
très bien, la partie centrale approchant de près la zone rectiligne, ce
qui permettrait de s'éviter la complication du raccordement.
http://exvacuo.free.fr/temp/courbe5.jpg
Comme on fixe 4 points, l'équation est a priori celle de degré 3 : B(t)
= P0(1-t)^3 + 3*P1*t*(t-2)^2 + 3*P2*t^2*(1-t) + p3*t^3 avec t de 0 à 1
Maintenant il faut que je comprenne comment relier ces points de
contrôle à mes propres contraintes (centre (x0,y0) de la loupe sur la
droite de pente 1, et pente p imposée à cet endroit).
P(t)=(x0,y0)(1-t)^2+2t(x1,y0)+(x1,y1)t^2 ?
Ca m'a l'air plus complex. Je viens de lire ça :
www.cad.zju.edu.cn/home/zhx/GM/009/00-bsia.pdf
ça refroidit...

Peut-être une piste là :
https://en.wikipedia.org/wiki/De_Boor's_algorithm
Christophe Dang Ngoc Chan
2017-05-02 12:14:14 UTC
Permalink
Post by François Guillet
Après, il faut voir ce que tu veux limiter : la dérivée, la dérivée
seconde, la dérivée 3e...
Si je savais exactement formuler mathématiquement ce que je souhaite, je
n'aurai pas mis fsp en copie.
Là je ne suis même pas sûr de ce qui est le mieux. Il faut représenter
des données dans un graphe, il y a des questions d'ergonomie, je tatonne.
http://exvacuo.free.fr/temp/courbe4.jpg
La question est : la dérivée, la dérivée 2nde et la dérivée 3e ont-elle
une importance dans ton cas ?

Si c'est juste esthétique, arbitraire, tu peux tout aussi bien utiliser
une courbe de Bézier quadratique (en choisissant un point de contrôle
sur la tangente à un endroit qui te donne un résultat satisfaisant).

<URL:https://fr.wikipedia.org/wiki/Courbe_de_B%C3%A9zier#Exemples>
--
Christophe Dang Ngoc Chan
François Guillet
2017-05-02 19:51:00 UTC
Permalink
Post by François Guillet
Après, il faut voir ce que tu veux limiter : la dérivée, la dérivée
seconde, la dérivée 3e...
Si je savais exactement formuler mathématiquement ce que je souhaite, je
n'aurai pas mis fsp en copie.
Là je ne suis même pas sûr de ce qui est le mieux. Il faut représenter
des données dans un graphe, il y a des questions d'ergonomie, je tatonne.
http://exvacuo.free.fr/temp/courbe4.jpg
La question est : la dérivée, la dérivée 2nde et la dérivée 3e ont-elle une
importance dans ton cas ?
Si c'est juste esthétique, arbitraire, tu peux tout aussi bien utiliser une
courbe de Bézier quadratique (en choisissant un point de contrôle sur la
tangente à un endroit qui te donne un résultat satisfaisant).
<URL:https://fr.wikipedia.org/wiki/Courbe_de_B%C3%A9zier#Exemples>
Oui, je suis sur cette piste, voir mon autre réponse à Paul Aubrin
Loading...