2017-02-26 5 views
0

処理が新しく、処理中に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(); 
    } 
    } 
} 

答えて

1

なぜあなたはyour last questionを削除したのですか?誰かが答えに時間を費やしてから質問を削除しないでください。

私がyour last questionで言ったように、あなたはあなたの旅の "脚"のインデックスを格納する必要があります。あなたはまた、その脚がどのくらい遠くにあるべきかを記憶する必要があります。次のポイントに達すると、インデックスを増分してパーセンテージをリセットします。

いずれにしても、この問題をより小さなステップに分割する必要があります。 1つのハードコードされたポイントから別のポイントに移動するサークルを示すプログラムを作成できますか?ユーザーの入力を心配することなく、それから始めてください。移動する前に完全に機能するようにしてください。次に、ハードコーディングされたポイントからユーザーがクリックするポイントに移動する円を示すプログラムを作成します。それを完璧に働かせてください。次に、2回のユーザークリックの間を移動する円を示すプログラムを入手します。それを完璧に働かせてください。パターンに気づく?

+0

あなたの提案をありがとう、本当に感謝して、私はそれを試してみましたが、私は0で算術例外があります。 – user3157072

+0

@ user3157072フォローアップの質問がある場合は、新しい投稿に[mcve](これは1つのポイントから別のコードに移動する単一の円でなければなりません)を作成してください。がんばろう。 –