如何将b样条曲线从4点更改为6?

时间:2013-12-14 21:41:43

标签: c++ graphics codeblocks curves bspline

我有一个关于C ++的代码它的b样条曲线有4个点如果我想将它改为6分我将在代码中改变什么?

您可以查看代码:

#include "graphics.h"
#include <math.h>

int main(void) {
  int gd, gm, page = 0;
  gd = VGA;
  gm = VGAMED;
  initgraph(&gd, &gm, "");
  point2d pontok[4] = { 100, 100, 150, 200, 170, 130, 240, 270 }; //pontok means points

  int ap;
  for (;;) {
    setactivepage(page);
    cleardevice();
    for (int i = 0; i < 4; i++)
      circle(integer(pontok[i].x), integer(pontok[i].y), 3);

    double t = 0;

    moveto((1.0 / 6) * (pontok[0].x * pow(1 - t, 3) +
                        pontok[1].x * (3 * t * t * t - 6 * t * t + 4) +
                        pontok[2].x * (-3 * t * t * t + 3 * t * t + 3 * t + 1) +
                        pontok[3].x * t * t * t),
           (1.0 / 6) * (pontok[0].y * pow(1 - t, 3) +
                        pontok[1].y * (3 * t * t * t - 6 * t * t + 4) +
                        pontok[2].y * (-3 * t * t * t + 3 * t * t + 3 * t + 1) +
                        pontok[3].y * t * t * t));

    for (t = 0; t <= 1; t += 0.01)
      lineto(
          (1.0 / 6) * (pontok[0].x * pow(1 - t, 3) +
                       pontok[1].x * (3 * t * t * t - 6 * t * t + 4) +
                       pontok[2].x * (-3 * t * t * t + 3 * t * t + 3 * t + 1) +
                       pontok[3].x * t * t * t),
          (1.0 / 6) * (pontok[0].y * pow(1 - t, 3) +
                       pontok[1].y * (3 * t * t * t - 6 * t * t + 4) +
                       pontok[2].y * (-3 * t * t * t + 3 * t * t + 3 * t + 1) +
                       pontok[3].y * t * t * t));

    /* Egerkezeles */ //Egerkezeles means mouse event handling
    if (!balgomb)
      ap = getactivepoint((point2d *)pontok, 4, 5);
    if (ap >= 0 && balgomb) { //balgomb means left mouse button
      pontok[ap].x = egerx;   //eger means mouse
      pontok[ap].y = egery;
    }
    /* Egerkezeles vege */

    setvisualpage(page);
    page = 1 - page;
    if (kbhit())
      break;
  }
  getch();
  closegraph();
  return 0;
}

请一些人帮我吧:) 谢谢你。

1 个答案:

答案 0 :(得分:0)

从您的公式中,看起来您正在尝试绘制三次贝塞尔曲线。但这个公式似乎并不完全正确。你可以google&#34;立方贝塞尔曲线&#34;找到正确的公式。 Wikipedia page包含任何程度的贝塞尔曲线的公式。你可以找到&#34; 6分&#34;从那里使用度= 5的公式。