Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm working on a project that generates a series of quadratic bezier curves and connects them together, maintaining slope from the end of one segment to the beginning of the next to make the transition smooth. The problem is that while the path is smooth, it tends to go off screen frequently.

The way this is done currently:

P0 = new Point(0, gapStart);  
P2 = new Point(wallWidth, gapEnd);  
P1 = getAnchorPoint();

where:
GapStart is the P2.y of the previous curve
wallWidth is a constant
gapEnd is the one and only random aspect of the cave generation It's the Y value that the curve will end at.

The getAnchorPoint function takes points 0 and 2 and generates an anchor point so that the slope at the beginning of this segment is the same as the end of the previous segment.

So the main question is, what values can gapEnd be to ensure that the next curve has a gapEnd that won't send the curve off the screen?

In other words, how do I determine the min and max values of gapEnd so that the next curve is safe?

In addition, it's important that these values don't box the following curve in to being impossible: i.e. they cannot allow for the next curve to not have a possible solution that would allow for continued curve generation.

Image of cave generation process

share|improve this question
    
Why are you chopping them up into small pieces at all? –  Job Aug 6 '11 at 2:15
    
I'm using AS3's built in graphics.curveTo function that generates a quadratic curve, so I'm making each curve a piece. I also don't want to do pre-generated levels - the levels will use a random seed, but they will be generated as the game progresses. The levels also will be indefinite size. As for a bezier curve with many more points, I think I would run into issues getting the curves to look right. I'm also not sure how much processing power it would take to do a bezier curve with many, many points. –  Ethan Roseman Aug 6 '11 at 2:18
    
I'm about a year and a half into a project that has piecewise cubic beziers at it's heart. I literally spend days talking about splines. But I am not sure what you mean here. My guess is that you want to maintain C2 continuity while constraining the positions of the control points- if that is the case you need to define your problem a bit better before anyone can give you a good answer. –  T Duncan Smith Aug 6 '11 at 2:41
    
@TDuncanSmith, I'm not sure I understand what you're saying. We want to maintain continuity within the whole set of beziers, but we've already solved that problem. The issue is choosing an acceptable Y for P2 that allows a following curve that stays on screen. –  Ethan Roseman Aug 6 '11 at 3:02
1  
What I mean is that you are not expressing your constraints very precisely. What sort of continuity are you looking for? C0? C1? C2? Do you even understand what I am asking here? Do you understand that the beziers know nothing about your screen coordinates? If your question were a question, I could answer it. But you are not asking a question... –  T Duncan Smith Aug 6 '11 at 5:31

1 Answer 1

I think it would be easier to either use cubic Bezier curves, or B-Splines.

Cubic Bezier curves work with two control points, and would allow you to specify one slope without affecting the other. To enforce C1 continuity you simply have to line up two control points. You can change the weight of one pair of control points by adjusting their distance from their common curve point.

B-Splines work with a sequence of points and interpolate a curve trough (or close to) them. They are much easier to work with when you have a sequence of points.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.