当前位置: 首页 > 知识库问答 >
问题:

加工中沿Bezier曲线运动

华展鹏
2023-03-14

我的球在贝塞尔曲线中从起点运动到曲线中间的代码是:

     void ballMove()
    {

      if(y[0]==height*1/10)
      {

        bezier (x[0], y[0],x[1], y[1], x[2], y[2], x[3], y[3]);
      float x0; float x1; float x2; float x3; 
    float y0; float y1; float y2; float y3;

    x0 = x[0]; x1 = x[1]; x2 = x[2]; x3 = x[3]; 
    y0 = y[0]; y1 = y[1]; y2 = y[2]; y3 = y[3];


     float t =  (frameCount/100.0)%1;
      float x = bezierPoint(x0, x1, x2, x3, t);
      float y = bezierPoint( y0, y1, y2, y3, t);

       if(t>=0.5)
      {
        t=0;
      }

      while(t==0.5)
     {
       a=x;
       b=y;
     }
      while(t>0.5)
      {
        ellipse(a,b,30,30);
      }
      fill(255,0,0);
      if(t!=0)
      {
      ellipse(x, y, 15, 15);
      }
      }
    }

我已经定义了所有的设置,绘制等,但我想发射球从开始到贝塞尔曲线的中间,只要空间被压一次。

你有什么建议吗?

共有1个答案

艾和通
2023-03-14

您犯的最大错误是在计算红球的xy位置后,更改了t的值。为了避免这种情况,您需要首先在[0,1](如果是[0,0.5])之间计算t,然后根据程序的状态更改该值。

frameCount计算t时犯的第二个错误。首先使用modulo提取数字[0,50],然后将其映射到范围[0,0.5]中,如下所示

float t =  (frameCount % 50) * 0.01;

你还提到你想在按下某个键后重复这个动画。为此,您将需要keypressed方法和一些全局变量来表示程序状态和存储动画的起始帧(因为frameCount应该是只读的)。因此基本功能可以通过以下方式实现:

boolean run = false;
float f_start = 0;

void ballMove() {
  noFill();
  bezier (x0, y0, x1, y1, x2, y2, x3, y3);

  float t =  ((frameCount - f_start) % 50) * 0.01;

  if (run == false) {
    t = 0;
  }
  float x = bezierPoint(x0, x1, x2, x3, t);
  float y = bezierPoint( y0, y1, y2, y3, t);

  fill(255, 0, 0);
  ellipse(x, y, 5, 5);
}

void keyPressed() {
  run = !run;
  f_start = frameCount;
}

希望这对你有帮助。下次请贴一个MCVE这样我们就不需要与你的代码斗争了。

 类似资料:
  • 给定一个X值(或百分比),我需要沿着二次Bezier曲线找到一点的Y坐标 该曲线是在android中使用以下内容绘制的折线图的一部分:

  • 大家好,我需要一些帮助。我用Python(Tkinter)写了一个代码,它是绘制一个3度贝塞尔曲线,并且它是工作的。。。。kinda.我的问题是:我如何直接从键盘输入x和y坐标为控制点,而不是先x后y(像我的代码)。第二个问题是关于参数(u或t值。通常它是标准化的(值0到1),但对于循环将不工作的十进制值为步骤(我知道这是显而易见的:))。如果我把u=1-&>1000,然后除以1000,它在数字上

  • 本文向大家介绍OpenGL实现Bezier曲线的方法示例,包括了OpenGL实现Bezier曲线的方法示例的使用技巧和注意事项,需要的朋友参考一下 Bezier曲线的形状是通过一组多边折线(特征多边形)的各顶点唯一地定义出来的。在这组顶点中: (1)只有第一个顶点和最后一个顶点在曲线上; (2)其余的顶点则用于定义曲线的导数、阶次和形状; (3)第一条边和最后一条边则表示了曲线在两端点处的切线方向

  • 为了做到这一点,我将需要找到控制点的“边缘”曲线决定形状,然后填充形状,这是发现在两个新的曲线之间。然而,我很不确定如何做到这一点。我想过的一件事是通过简单地在连接原控制点和原终点的直线上画垂直段来确定新曲线的起点和终点,但这仍然不能解决为新曲线寻找新控制点的问题。

  • 我试图画一条具有一定厚度的三次bezier路径,但曲线看起来像是一系列断开的线段(在我的例子中是3段)。这是一张截图(蓝色圆圈是曲线的控制点)。 我注意到在cocos2d-x测试中的“绘制原语”中也出现了同样的效果。不管怎样,我很确定应该有一个变通办法,但我自己找不到。此外,线条受到锯齿效应的影响,我不知道如何应用一个alpha阴影来避免它。 这是我使用的代码:

  • 我想沿着这条路径平稳地移动一个物体。为了实现这一点,我想创建基于点的二次或三次Bezier曲线,并插值这些曲线。然而,我如何适当地拟合曲线,以使路径不被破坏,如果。一条曲线在F点停止,另一条曲线开始?