Click here to Skip to main content
15,889,632 members
Home / Discussions / Algorithms
   

Algorithms

 
AnswerRe: An Algorithm Design Challenge Pin
ColinDavies29-Sep-06 12:19
ColinDavies29-Sep-06 12:19 
Questioncombination algorithm Pin
kebd14-Sep-06 11:53
kebd14-Sep-06 11:53 
AnswerRe: combination algorithm Pin
ejuanpp15-Sep-06 1:12
ejuanpp15-Sep-06 1:12 
GeneralRe: combination algorithm Pin
kebd15-Sep-06 8:29
kebd15-Sep-06 8:29 
Questiondfgfdg Pin
Gul zeb14-Sep-06 2:13
Gul zeb14-Sep-06 2:13 
Generalfdfdsf Pin
Gul zeb13-Sep-06 21:43
Gul zeb13-Sep-06 21:43 
GeneralRe: fdfdsf Pin
Ed.Poore14-Sep-06 1:04
Ed.Poore14-Sep-06 1:04 
QuestionBezier curve, Newton-Raphelson method, formula problem, please help! [modified] Pin
srev13-Sep-06 4:29
srev13-Sep-06 4:29 
Hi Guys,

I’m creating an animation program and have built a Bezier spline motion editor. The user-controllable curve plots time(x) against value(y). So my challenge is to retrieve the 'y' value from a given 'x' on the curve. However, all the articles I've been able to find/understand only give a formula for calculating an x or y from 't' - the percentage along the given cubic bezier curve.

As 't' is more concentrated around areas which heavily curve (to make a smooth curve), it's not possible to calculate y from x. So I'm using what seems to be a recognised work around and iteratively guessing at which 't' value produces x, continually reducing the difference until I find the correct 't' which produces my required x. I then use this 't' to calculate y.

This all works perfectly well. However, this is an animation program so I need to optimize this process. My current technique requires up to 15 iterations before it finds an accurate value for 't'. I found an article online by Don Lanaster, “Some more cubic spline math BEZMATH.PS”. He mentions using the Newton-Raphelson method to reduce this process down to 3 iterations. Apparently this technique uses the slope of the curve to make the approximation of 't' more accurate. However, the formula he uses doesn't match the formula I currently have working to calculate a value on the curve. I'm sure I'm misunderstanding it!

At this point I have to confess I am a Math dummy. I can work my way around practical mathematical issues as long as I don’t have to resort to long formulas full of ancient Greek!

Here's an extract from Don's article:

--- Quote ----
Let's use a better ploy to get our approximation to close quickly. It is called the NEWTON-RAPHELSON method, but is much simpler than it sounds. Say we get an error of x - x1. x1 is the current x for our current guess. At x1, our spline curve has a slope. Find the slope.

The slope is expressed as rise/run. Now, on any triangle...

rise = run x (rise/run)

This gives us a very good improvement for our next approximation. It turns out that the "adjust for slope" method converges very rapidly. Three passes are usually good enough. If our curve has an equation of...

x = At^3 + Bt^2 + Ct + D

...its slope will be...

x' = 3At^2 +2Bt + C

And the dt/dx slope will be its inverse or 1/(3At^2 + 2Bt +C). This is easily calculated. The next guess will be...

nextguess = currentt + (curentx - x)(currentslope)

----- end quote ----



So here's the function I call iteratively with varying values for 't' and it returns 'x' for me to compare with what I want:

public float CalcBezierValue(float t, float A, float B, float C, float D)
{
t = 1 - t; // Reverse the normalised percentage

float F1 = t * t * t; // These vars used purely for visual clarity
float F2 = 3 * t * t * (1 - t);
float F3 = 3 * t * (1 - t) * (1 - t);
float F4 = (1 - t) * (1 - t) * (1 - t);

return A * F1 + B * F2 + C * F3 + D * F4;
}

As you can see the base formula which produces the return value is quite different from the one in the article (x = At^3 + Bt^2 + Ct + D). Consequently I’m failing to comprehend how to calculate the slope value or its inverse which seem to be required to reduce the number of calls to this function.

Can anyone help me?

Many thanks for your time,

Simon


-- modified at 12:01 Wednesday 13th September, 2006
AnswerRe: Bezier curve, Newton-Raphelson method, formula problem, please help! Pin
El Corazon13-Sep-06 16:14
El Corazon13-Sep-06 16:14 
GeneralRe: Bezier curve, Newton-Raphelson method, formula problem, please help! Pin
srev13-Sep-06 23:42
srev13-Sep-06 23:42 
AnswerRe: Bezier curve, Newton-Raphelson method, formula problem, please help! Pin
ejuanpp13-Sep-06 22:00
ejuanpp13-Sep-06 22:00 
GeneralRe: Bezier curve, Newton-Raphelson method, formula problem, please help! Pin
srev13-Sep-06 23:40
srev13-Sep-06 23:40 
General44th Mersenne Prime Discovered Pin
Bassam Abdul-Baki13-Sep-06 3:10
professionalBassam Abdul-Baki13-Sep-06 3:10 
GeneralRe: 44th Mersenne Prime Discovered Pin
Paul Conrad13-Sep-06 20:32
professionalPaul Conrad13-Sep-06 20:32 
QuestionImpossible Numbers Pin
ricecake8-Sep-06 4:13
ricecake8-Sep-06 4:13 
AnswerRe: Impossible Numbers Pin
Kacee Giger8-Sep-06 13:13
Kacee Giger8-Sep-06 13:13 
GeneralRe: Impossible Numbers Pin
ricecake8-Sep-06 13:24
ricecake8-Sep-06 13:24 
Questionnth root? Pin
Steve Echols5-Sep-06 19:21
Steve Echols5-Sep-06 19:21 
AnswerRe: nth root? Pin
ejuanpp5-Sep-06 23:07
ejuanpp5-Sep-06 23:07 
GeneralRe: nth root? Pin
Steve Echols6-Sep-06 4:44
Steve Echols6-Sep-06 4:44 
AnswerRe: nth root? Pin
Sauruxum23-Jun-10 2:43
Sauruxum23-Jun-10 2:43 
QuestionCrypto Formula Malfunction Pin
rawstar5-Sep-06 6:34
rawstar5-Sep-06 6:34 
AnswerRe: Crypto Formula Malfunction Pin
Paul Conrad14-Jul-07 10:21
professionalPaul Conrad14-Jul-07 10:21 
QuestionMAP Pin
MHASSANF4-Sep-06 22:36
MHASSANF4-Sep-06 22:36 
Questionwhat are the codes of this Pin
robeelyn2-Sep-06 5:18
robeelyn2-Sep-06 5:18 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.