http://en.wikipedia.org/wiki/B%C3%A9zier_curve
今天看有人画Bezier曲线,看了下wiki,感觉挺好玩,简单弄了个opengl绘制,实现了线性和二次Bezier曲线绘制
不过貌似后面的更好玩,不过没怎么看了一下自己
#if 10
#include <gl/glut.h>
#include <vector>
#include <Windows.h>
#pragma comment(lib, "glut32.lib")
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 800
#define ORTHO_W 10.0f
#define ORTHO_H 10.0f
#define RATIO_X (ORTHO_W / WINDOW_WIDTH)
#define RATIO_Y (ORTHO_H / WINDOW_HEIGHT)
/* point position definition */
class Point2D {
public:
Point2D() {
x_ = y_ = 0.0f;
}
Point2D(float x, float y) {
x_ = x;
y_ = y;
}
Point2D(const Point2D &ref) {
x_ = ref.x_;
y_ = ref.y_;
}
Point2D operator +(const Point2D &ref) {
return Point2D(x_ + ref.x_, y_+ref.y_);
}
Point2D operator -(const Point2D &ref) {
return Point2D(x_ - ref.x_, y_ - ref.y_);
}
Point2D operator *(float scale) {
return Point2D(x_ * scale, y_ * scale);
}
bool operator==(const Point2D& ref) const {
return (x_==ref.x_ && y_==ref.y_);
}
bool operator!=(const Point2D& ref) const {
return !(*this == ref);
}
const Point2D& operator=(const Point2D& ref) {
x_ = ref.x_;
y_ = ref.y_;
return *this;
}
friend Point2D operator *(float scale, const Point2D &ref) {
return Point2D(scale * ref.x_, scale * ref.y_);
}
public:
float x_, y_;
};
/* Linear Bézier curves definition */
class LinearBezier {
public:
LinearBezier(Point2D p0, Point2D p1)
: p0_(p0), p1_(p1), t_(0.0f