最近在研究捕鱼的路径点问题。

上司要求路径由几个贝塞尔曲线的特征点来生成鱼的路径。

倒腾了一会 真没想到自己写出来了。

也算是自己毕业后写的第一个有关游戏的算法。

写这篇日志做一个笔记。这里只放出关键代码。

//首先它肯定需要一个递归调用,因为每个比例都要生成一个点,
//然而,每次计算都要从n个点计算为n-1个点,最后到一个点。这个点就是需要的路径点。
//typedef std::vector Points;
void MathAide::calcBezier(Points bps, float rat, Points &pathView)
{
	Points newBezierPoints;
        //如果只有一个点,那么这个点就是路径点,把他加入路径里。
	if (bps.size() == 1){
		pathView.push_back(bps.bezierPoints[0]);
	}else{
        //否则继续计算出下一轮的若干点位置
		for (int i = 0; i < bps.size() - 1; i++)
		{
			float tpx = bps[i].x_;
			float tpy = bps[i].y_;
			float tlx = bps[i + 1].x_;
			float tly = bps[i + 1].y_;

			float nx;
			float ny;

			nx = tpx + (tlx - tpx)*rat;
			ny = tpy + (tly - tpy)*rat;

			newBezierPoints.push_back(Point(nx, ny));
		}
		MathAide::calcBezier(newBezierPoints, rat, pathView);
	}
}//以上是一个比例,那么每个比例都要生成。


//关于调用
float fPointNumber =200.0;
for(float rat=0.0;rat<1;rat+=1/fPointNumber)
{
    MathAide::calcBezier(bps,rat,pathView);
}