処理が新しく、処理中に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();
}
}
}
あなたの提案をありがとう、本当に感謝して、私はそれを試してみましたが、私は0で算術例外があります。 – user3157072
@ user3157072フォローアップの質問がある場合は、新しい投稿に[mcve](これは1つのポイントから別のコードに移動する単一の円でなければなりません)を作成してください。がんばろう。 –