Sign in to follow this  

Bernstein Polynomial Approximation (solved)

This topic is 4089 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

trying to code Bernstein Polynomial Approximation to draw a curve between a set number of points, but i think my understanding of the material is just a bit too weak, this is my code right now. I am coding in C++, the function BB returns the binomial coefficient, pointList is just the list on control points, power will raise a number to the specified power, and drawList is the list of points to be drawn. When there are 2 points it will draw a straight line of points as it should, with a third point it forms a curve but it is a bit exagerated and in the wrong position, and after that it gets worse until there is no visable curve. This seems like a very simple problem, and i am surprised i have not solved it yet, but my brain must have given out on me. Any help would be great.
void drawBB()
{
	if(pointList.size() > 0)
	{
		drawList.clear();
		int d = pointList.size() - 1;
		for(float t = .1; t < 1; t += .1)
		{
			float posX = 0;
			float posY = 0;

			for(int i = 0; i <= d; ++i)
			{
				int fact = BB(d,i);
				float part2 = power(1 - t,d-i);
				float part3 = power(t,i);
				int partx = pointList[i].mX;
				int party = pointList[i].mY;
				
				posX += fact * part2 * part3 * partx;
				posY += fact * part2 * part3 * party;

			}
			CS200::Point2D Point1((posX),(posY));
			drawList.push_back(Point1);
		}
	}
}

[Edited by - Ultraseamus on October 4, 2006 8:28:10 AM]

Share this post


Link to post
Share on other sites
wow..., i ran tests on my functions, but i missed something in my power function, when the base is a float (and the exponent is not 0 or 1) it looks like i accidently forced it to an int, throwing off all of my data. It must be time for me too go to bed, because i was stuck on that for over an hour :/. Thank You for your help. It is atleast nice to know i had the math right.

Share this post


Link to post
Share on other sites

This topic is 4089 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this