【问题标题】:Interpolation function in processing处理中的插值函数
【发布时间】:2017-02-26 10:55:08
【问题描述】:

我是处理新手,我正在尝试在处理中使用lerp 函数。基本上我想做的是,点击屏幕上的不同点,这些位置被存储在一个数组中。当用户单击enter 时,存储的动作将回放,ellipse 在点之间平滑移动。我的问题是,当我单击 Enter 时,我得到“算术异常为零”。你能指导我我错过了什么吗?谢谢。

final static int numFrames = 30; //frames between keyframes
final static int numKeyFrames = 1; //frames between keyframes
Point[] keyFrames;
Point[] frames;

void setup()  
{
  size(640, 480);
  frameRate(30);
  LinearInterp();
}

void mouseClicked()
{
  stroke(0);
  strokeWeight(8);
  for(int i=0; i<numKeyFrames; i++)
  {
    keyFrames = new Point[numKeyFrames];
    keyFrames[i] = new Point(mouseX,mouseY);
    point(keyFrames[i].x,keyFrames[i].y);
    println("Mouse Coordinates are: " + keyFrames[i]);
  }
}

void LinearInterp() 
{
  frames = new Point[numFrames*(numKeyFrames-1)]; 
  for (int kf = 0; kf< numKeyFrames-1; kf++)
  {
    Point p0 = keyFrames[kf];
    Point p1 = keyFrames[kf+1];
    for (int f =0; f<numFrames; f++)
    {
      float a = f*1.0/numFrames;
      int newX = int(p0.x * (1-a) + p1.x * a);
      int newY = int(p0.y * (1-a) + p1.y * a);
      frames[f+(kf*numFrames)] = new Point(newX,newY);
    }
  }
}

void animateFrames()
{
  stroke(187);
  strokeWeight(10);
  int i = frameCount % frames.length;  
  point(frames[i].x,frames[i].y);
}

void drawFrames() 
{
  stroke(187);
  strokeWeight(2);
  for (int i=0; i<frames.length; i++)
  {
    point(frames[i].x,frames[i].y);
  }
}

void draw() 
{
  if(keyPressed)
  {
    if(key == ENTER)
    {
      drawFrames();
      animateFrames();
    }
  }
}

【问题讨论】:

    标签: arrays mouseevent processing linear-interpolation lerp


    【解决方案1】:

    你为什么删除your last question?请不要在有人花时间回答问题后删除问题。

    就像我在your last question 中所说的那样,您需要存储您所在旅程的“腿”的索引。您还需要存储该点应该沿着那条腿多远。当你到达下一个点时,增加索引并重置百分比。

    无论如何,您都需要将此问题分解为更小的步骤。你能创建一个程序来显示一个从一个硬编码点到另一个点的圆圈吗?从此开始,无需担心用户输入。在继续之前让它完美地工作。然后让一个程序运行,显示一个从硬编码点移动到用户点击的点的圆圈。让它完美地工作。然后得到一个程序,显示在两次用户点击之间移动的圆圈。让它完美地工作。注意到一个模式了吗?

    【讨论】:

    • 感谢您的建议,非常感谢,我尝试解决了,但我的算术异常为零。
    • @user3157072 如果您有后续问题,请在新帖子中创建一个minimal reproducible example(这应该是一个从一个点移动到另一个点的单个圆圈,没有任何额外的代码),我们'从那里去。祝你好运。
    猜你喜欢
    • 2020-01-29
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    相关资源
    最近更新 更多