Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct BezierSurface {
- std::vector<BezierCurve> bcs;
- public:
- void AddCurve(BezierCurve bc) {
- bcs.push_back(bc);
- }
- float B(int i, float t) {
- int n = bcs.size()-1;
- float choose = 1;
- for (int j = 1; j <= i; j++)
- choose *= (float)(n - j + 1) / j;
- return choose * pow(t, i) * pow(1 - t, n - i);
- }
- float Bd(int i, float t) {
- return (bcs.size() - 1)*(B(i - 1, bcs.size() - 1) - B(i, bcs.size() - 1));
- }
- vec4 r(float t, float u) {
- vec4 rr(0, 0, 0);
- for (unsigned int i = 0; i < bcs.size(); i++){
- for (unsigned int j = 0; j < bcs[i].cps.size(); j++){
- rr = rr + bcs[i].cps[j] * B(i, u)*B(j, t);
- }
- }
- return rr;
- }
- vec4 Dt(float t, float u) {
- vec4 rr(0, 0, 0);
- for (unsigned int i = 0; i < bcs.size(); i++) {
- for (unsigned int j = 0; j < bcs[i].cps.size(); j++) {
- rr = rr + bcs[i].cps[j] * B(i, u) * Bd(j, t);
- }
- }
- printf("%f, %f, %f\n", rr.v[0], rr.v[1], rr.v[2]);
- return rr;
- }
- vec4 Du(float t, float u) {
- vec4 rr(0, 0, 0);
- for (unsigned int i = 0; i < bcs.size(); i++) {
- for (unsigned int j = 0; j < bcs[i].cps.size(); j++) {
- rr = rr + bcs[i].cps[j] * Bd(i, u) * B(j, t);
- }
- }
- printf("%f, %f, %f\n", rr.v[0], rr.v[1], rr.v[2]);
- return rr;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement