简单的二次B样条曲线
//使用二次B样条曲线生成离散点 vector<Point>& Route::bSpline() { double a0,a1,a2; double dt,t1,t2; Point tmp_p; //使首位相连 Point *newp = new Point[num_points+2]; for (int i=0; i<num_points; i++) { newp[i].setXY(p[i].x, p[i].y); } newp[num_points].setXY(p[0].x, p[0].y); newp[num_points+1].setXY(p[1].x, p[1].y); dt=1.0/k; tmp_p.setXY((newp[0].x+newp[1].x)/2,(newp[0].y+newp[1].y)/2); //曲线起始点; positions.push_back(tmp_p); //将结果输出到文件 ofstream outlog("positons.txt"); outlog<<"x= "<<tmp_p.x<<" y= "<<tmp_p.y<<"\n"; for(int i=1;i<num_points+1;i++) { for(int j=0;j<=k;j++) { t1=j*dt; t2=t1*t1; a0=(t2-2*t1+1)/2.0; a1=(2*t1-2*t2+1)/2.0; a2=t2/2.0; double t_x,t_y; t_x=a0*newp[i-1].x+a1*newp[i].x+a2*newp[i+1].x; t_y=a0*newp[i-1].y+a1*newp[i].y+a2*newp[i+1].y; tmp_p.setXY(t_x,t_y); outlog<<"x= "<<tmp_p.x<<" y= "<<tmp_p.y<<"\n"; positions.push_back(tmp_p); } } // positions.pop_back(); outlog.close(); delete [] newp; return positions; }
作者:涵曦(www.hanxi.cc)
出处:hanxi.cnblogs.com
GitHub:github.com/hanxi
Email:im.hanxi@gmail.com
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
《 Skynet 游戏服务器开发实战》
-
学习地址:
-
优惠推荐码:
2CZ2UA5u
-
可以先免费试学前 2 章内容