[Date Index]
[Thread Index]
[Author Index]
Re: Beginner question
*To*: mathgroup at smc.vnet.net
*Subject*: [mg14103] Re: [mg14078] Beginner question
*From*: "Jens-Peer Kuska" <kuska at linmpi.mpg.de>
*Date*: Fri, 25 Sep 1998 03:15:27 -0400
*Sender*: owner-wri-mathgroup at wolfram.com
Hi Jean-Denis,
this mean that You mix up Set[] and Equal[]
Your input
(bezX[t] + bezY[t]) = (bezX[t] - bezY[t])^2 +1
try to *set* the value for (bezX[t] + bezY[t]), that is nonsense and
Mathematica trys to say this in a very moderate way. It is not clear to
me what are input and what have to come out. If You mean
SolveAlways[
Join[
eqns/. {X0->1,Y0->0,X3->0,Y3->1}, (* the boundary bnds*)
0==# & /@
CoefficientList[
2 (bezX[t] + bezY[t]) -((bezX[t] - bezY[t])^2 +1)/.
{X0->1,Y0->0, X3->0,Y3->1}, (* again the bnds *)
t
]
],
t
]
You have to type it, and You will get six solutions.
Let's go to Your statements step by step:
eqns = {
X0 == Dx,
Y0 == Dy,
X1 == X0 + Cx /3,
Y1 == Y0 + Cy /3,
X2 == X1 + (Cx+Bx)/3,
Y2 == Y1 + (Cy+By)/3,
X3 == X0 + Cx + Bx + Ax,
Y3 == Y0 + Cy + By + Ay
}
Here You know the difference between Set[] and Equal[]. If this is an
interpolation X0,X1,X2,X3 and Y0,Y1, Y2, Y3 are input parameter. You
have 8 equations for the 8 unknowns Ax,Ay,..,Dx,Dy and
parasol=Solve[eqns,{Ax,Ay,Bx,By,Cx,Cy,Dx,Dy}]
give You a unique solution and You have no degree of freedom anymore to
add the condition of the canonical parabolic arc or the boundaries.
By the way, the equations above using the conditions
{bezX[0],bezY[0]}=={X0,Y0} and {bezX[1],bezY[1]}=={X3,Y3}. That means
that You will never fullfill the boundary conditions with free X0,Y0
and X3,Y3.
Let's try the opposite version and start with Your condition, since it
must be valid for all t the polynom in t obtained by inserting the
expressions into the parabolic arc condition must have zero
coefficients. One quickly writes down
eqns=0==# & /@
CoefficientList[
2 (cX[t] + cY[t]) -((cX[t] - cY[t])^2 +1)
/. {
cX[t_]:>a[0]+a[1]*t+a[2]*t^2+a[3]*t^3,
cY[t_]:>b[0]+b[1]*t+b[2]*t^2+b[3]*t^3
},
t
]
that are six equations for the six powers of t. Unfortunatly only five
of them
are linear independent. With
cond=Solve[eqns,{a[3],b[3],a[2],b[2],a[1]}]
You get four solutions for the five parameters. The three parameters
a[0],b[0] and b[1] remain to be fixed by the "boundary" conditions
With the four bondary conditions You will not be able to find a solution
with the 3 remaining paramters You can prove this by
Solve[{cX[0] == 1, cY[t]==0,cX[1] ==0,cY[1] ==1}
/. {cX[t_]:>a[0]+a[1]*t+a[2]*t^2+a[3]*t^3,
cY[t_]:>b[0]+b[1]*t+b[2]*t^2+b[3]*t^3} /.#,{b[1],b[0],a[0]}]
& /@
cond
What is left,
the statements
bezX[t_] == Ax t^3 + Bx t^2 + Cx t + Dx bezY[t_] == Ay t^3 + By t^2 + Cy
t + Dy
mean probably
bezX[t_] := Ax t^3 + Bx t^2 + Cx t + Dx
bezY[t_] := Ay t^3 + By t^2 + Cy t + Dy
? and You have to look for the difference of SetDelayed[] and Equal[]
Implies[] is only use full is You not insert equations.
Hope that helps
Jens
-----Original Message-----
From: Jean-Denis S Bertron <bertronj at indra.com> To:
mathgroup at smc.vnet.net
Subject: [mg14103] [mg14078] Beginner question
>Hi all,
>I've got this very simple problem, for which I know the solution, but
>somehow I can't get mathematica to solve it. The question is : Is it
>possible to parameterize a parabolic arc using a bezier curve ?
>Here are the basic equations:
>
>The definition of a bezier curve is: eqns = {
>X0 == Dx,
>Y0 == Dy,
>X1 == X0 + Cx /3,
>Y1 == Y0 + Cy /3,
>X2 == X1 + (Cx+Bx)/3,
>Y2 == Y1 + (Cy+By)/3,
>X3 == X0 + Cx + Bx + Ax,
>Y3 == Y0 + Cy + By + Ay
>}
>and
>with bezX[t_] == Ax t^3 + Bx t^2 + Cx t + Dx
> bezY[t_] == Ay t^3 + By t^2 + Cy t + Dy with 0 <= t <= 1.
>The canonical parabolic arc is defined by: 2 (bezX[t] + bezY[t]) =
>(bezX[t] - bezY[t])^2 +1 If there is a solution the boundary conditions
>are: bnds = {bezX[0] == 1, bezY[0] == 0, bezX[1] ==0,bezY[1] ==1}
>
>I entered all this stuff in mathematica (eqns,bnds,bezX[t_],bezY[t_])
>and each statement returns nice algebraic rules. When I finally give it
>the following: SolveAlways[Implies[eqns,2 (bezX[t] + bezY[t]) =
>(bezX[t] - bezY[t])^2 +1], t] All it does is reply:
>Set::write: Tag Times in 2 (bezX[t] + bezY[t]) is protected.
>SolveAlways::elist:
> ---------- Message text not found ---- (....)
>
>What does this mean ?
>J.D.
>
>--
>Jean-Denis Bertron jd.bertron at pobox.com
>http://rainbow.rmi.net/~bertronj
>Disclaimer(message):- Offending(message)!.
>
>
Prev by Date:
**Problem to be solved**
Next by Date:
**Compiled programs**
Previous by thread:
**Beginner question**
Next by thread:
**Limit glitch**
| |