计算公式:
使用说明:鼠标在窗口点击绘制B样条曲线,鼠标右键移动控制点。退格键(←)删除鼠标所在的点。
运行效果:
代码如下:
#include<gl/glut.h>
#include<math.h>
#include<windows.h>
#include<vector>
#include<algorithm>
using namespace std;
bool mouseRightIsDown = false;
struct Point
{
int x, y;
Point(){
};
Point(int tx, int ty)
{
x = tx;
y = ty;
}
};
vector<Point> p;
double getRatio(double t,double a,double b,double c,double d)
{
return a * pow(t, 3) + b * pow(t, 2) + c * t + d;
}
double caculateSquarDistance(Point a, Point b)
{
return (a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y);
}
int getIndexNearByMouse(int x, int y)
{
double precision = 200; //精确度
int index = -1;
double Min;
for (int i = 0; i < p.size(); i++)
{
double dis = caculateSquarDistance(p[i], Point(x, y));
if (dis < precision)
{
if