P.Fradin a écrit:Et oui, là le paramétrage est une fraction rationnelle dont le dénominateur est $B_0(t)+$poids*$B_1(t)+B_2(t)$ (qui vaut $1$ si le poids vaut $1$). Lorsque le poids est >-1 la courbe est un arc d'ellipse, de parabole ou d'hyperbole d'extrémité p1 et p2, donc dans ce cas pas de soucis, l'arc est bien borné et on peut calculer les bornes (je m'en occupe). Mais lorsque le poids est <=-1 on a deux portions d'arc non bornés (et même trois dans le cas d'une hyperbole).
circular a écrit: Quelques questions à propos de l'exception de poids zéro.
- Le fait d'interpréter le poids zéro comme une ellipse, est-ce que c'est cela qui n'est pas standard ?
- Le décrire avec un vecteur me semble une exception pas nécessaire. On peut définir c = f(1/2) et comme ça pas de vecteur.
- Ne serait-ce pas redondant avec ArcDef? En effet, définir une demi-ellipse peut se faire avec ArcDef. Il n'y a pas de fonction qui permette de le définir avec le point de contrôle, mais cela peut se faire.
Sinon il me semble que tu disais que l'on pouvait transformer affinement cela, ce qui à ce moment-là permettrait plus que l'ArcDef, qui ne peut être que tourné et zoomé mais pas de déformation différente selon deux axes. Ce serait l'intérêt du remplacement du poids zéro?
P.Fradin a écrit:circular a écrit: Quelques questions à propos de l'exception de poids zéro.
- Le fait d'interpréter le poids zéro comme une ellipse, est-ce que c'est cela qui n'est pas standard ?
D'après la définition de Lionel Garnier (qui a étudié et développé pour sa thèse ce genre de courbes, entre autres, c'est lui qui m'a fait connaître ceci), une courbe de Bézier rationnelle quadratique revient à associer un poids à chacun des trois points, elle est quasi standard lorsque le premier et le troisième point (extrémités de la courbe) ont un poids égal à 1. Dans une courbe de Bézier rationnelle standard (la courbe classique), les trois poids sont égaux à 1.
- Le décrire avec un vecteur me semble une exception pas nécessaire. On peut définir c = f(1/2) et comme ça pas de vecteur.
Prendre $c=f(1/2)$ ? Mais la courbe ne passe pas par c !
ils ont vérifié qu'une telle courbe est une demi-ellipse et que la tangente aux extrémités est dirigée par le vecteur c, c'est pile le cas qui manquait (en réalité ce qu'ils ont étudié est beaucoup plus général).
Un des grands intérêts des courbes de Bézier est que leur image par une application affine est encore une courbe de Bézier dont les points de contrôles sont les images des images des points de contrôles de la première.
Cela dit ma question est plutôt de savoir si une ellipse reste une ellipse par transformation affine quelconque.
P.Fradin a écrit:Cela dit ma question est plutôt de savoir si une ellipse reste une ellipse par transformation affine quelconque.
Oui si les images des deux extrémités (p1 et p2) ne sont pas confondues et si le vecteur c n'est pas dans le noyau de la partie linéaire (sinon on a une conique à discriminant nul), et oui à coup sûr si la transformation est bijective.
Quant à savoir si le poids risque d'être arrondi à zéro ou non je ne suis pas sûr que cela soit un problème si l'utilisateur sait ce qu'il fait, c'est un problème intrinsèque à tout calcul en flottant en informatique, le programmeur averti le sait. Les auteurs que j'ai cités dans mon précédent message utilisent ces courbes (mais aussi les surfaces de Bézier avec points coefficientés), en images de synthèse, donc c'est une utilisation informatique. Elles ont également été intégrées dans le package pstricks (avec trois poids au lieu d'un seul) par Manuel Luque et Herbert Voss, peut-être connais-tu ce package pour LaTeX (pst-bezier), voici la doc :
Je ne sais pas si la définition de la demi-ellipse est plus commode avec trois points, je ne me suis pas posé la question. Ce que je t'ai proposé est cas très particulier d'une notion plus générale de courbes de Bézier (pas forcément planes) définies par des points de contrôles et des vecteurs de contrôles, ceux ci pouvant définir des directions de tangentes ou d'asymptotes suivant les cas.
Je vais intégrer ce que je t'ai proposé dans TeXgraph, pour l'export pstricks j'utiliserai la package de Manuel, mais rien n'oblige à ce que ce soit intégré dans la libraire BGRABitmap !
function TQuadraticBezierCurve.SimpleComputePoints(AAcceptedDeviation: single;
AIncludeFirstPoint: boolean = true): ArrayOfTPointF;
var
t,step: single;
i,nb: Integer;
pA,pB : TpointF;
begin
nb := ComputeBezierCurvePrecision(p1,c,c,p2, AAcceptedDeviation);
if nb <= 1 then nb := 2;
pA := p2+p1-2*c; pB := 2*(c-p1);
if AIncludeFirstPoint then
begin
setlength(result,nb);
result[0] := p1;
result[nb-1] := p2;
step := 1/(nb-1);
t := 0;
for i := 1 to nb-2 do
begin
t += step;
result[i] := p1+t*(pB+t*pA) //ComputePointAt(t);
end;
end else
begin
setlength(result,nb-1);
result[nb-2] := p2;
step := 1/(nb-1);
t := 0;
for i := 0 to nb-3 do
begin
t += step;
result[i] := p1+t*(pB+t*pA) //ComputePointAt(t);
end;
end;
end;
[
view(-5,5,-5,5),Marges(0,0,0,0), size(8),
O:=0, //centre
S:=2, //sommet
ex:=1.5, //excentricité
a:=abs(S-O), u:=(S-O)/a, v:=i*u, c:=ex*a, y:=a*(ex^2-1),
Droite(0,O+u), Droite(O,O+v), //axes
P0:= O+c*u+y*v, //début
P2:= O+c*u-y*v, //contrôle
P1:=O+a^2/c*u, //fin
w:=ex, // ici poids = excentricité !
Color:=red, Width:=24,
Parametric(a*ch(t)*u+sqrt(c^2-a^2)*sh(t)*v), Parametric(-a*ch(t)*u+sqrt(c^2-a^2)*sh(t)*v),//paramétrage classique
Width:=8, Color:=blue,
CBRQ(P0,P1,P2,w), //courbe de Bézier rationnelle, petit arc (connexe)
Color:= green,
CBRQ(P0,P1,P2,-w),//courbe de Bézier rationnelle, arc non connexe
Color:=black, Width:=4,LabelDot(O,"$O$","NO",1), LabelDot(S,"$S$","NE",1),
Color:=forestgreen, //points de construction
LabelDot(P0,"$P_0$","NO",1), LabelDot(P1,"$P_1$","NO",1),
LabelDot(P2,"$P_2$","SO",1), LabelDot(O+c*u,"Foyer","NE",1),
Ligne([P0,P1,P2],1)
]
Revenir vers Version intermédiaire
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités