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;
- }
- float Dt(float t, float u) {
- float sum = 0.0f;
- for (unsigned int i = 0; i < bcs.size(); i++) {
- for (unsigned int j = 0; j < bcs[i].cps.size(); j++) {
- sum += r(t, u).v[2] * B(i, u) * Bd(j, t);
- }
- }
- printf("%f\n",sum);
- return sum;
- }
- float Du(float t, float u) {
- float sum = 0.0f;
- for (unsigned int i = 0; i < bcs.size(); i++) {
- for (unsigned int j = 0; j < bcs[i].cps.size(); j++) {
- sum += r(t, u).v[2] * Bd(i, u) * B(j, t);
- }
- }
- printf("%f\n", sum);
- return sum;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement