2017-02-26 11 views
0

처리가 새로 생겼으며 처리 중 lerp 기능을 실험하려고합니다. 기본적으로 내가하려고하는 것은 화면상의 다른 지점을 클릭하는 것입니다.이 위치는 배열에 저장됩니다. 사용자가 enter을 클릭하면 저장된 움직임이 점 사이를 부드럽게 움직이는 ellipse으로 재생됩니다. 내 문제는 내가 입력을 클릭하면 '0으로 산술 예외'가 나타납니다. 제가 누락 된 부분을 안내해 주시겠습니까? 감사.처리 중 보간 기능

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에서 말했듯이, 여행의 "다리"의 색인을 저장해야합니다. 포인트가 있어야 할 다리까지의 거리도 저장해야합니다. 다음 지점에 도달하면 색인을 증가시키고 백분율을 재설정합니다.

어쨌든이 문제를 더 작은 단계로 나눌 필요가 있습니다. 하나의 하드 코딩 된 지점에서 다른 지점으로 이동하는 원을 표시하는 프로그램을 만들 수 있습니까? 사용자 입력에 대한 걱정없이 시작하십시오. 계속 진행하기 전에 완벽하게 작동하도록하십시오. 그런 다음 하드 코딩 된 지점에서 사용자가 클릭하는 지점으로 이동하는 원을 보여주는 프로그램 작동을 얻습니다. 완벽하게 작동하도록하십시오. 그런 다음 두 번의 사용자 클릭 사이를 이동하는 동그라미를 보여주는 프로그램을 만듭니다. 완벽하게 작동하도록하십시오. 패턴을 주목하세요?

+0

귀하의 제안에 감사드립니다, 정말 고마워, 나는 그것을 노력했지만 제로에 의해 산술 예외가 발생했습니다. – user3157072

+0

@ user3157072 후속 질문이있는 경우 [mcve] (추가 코드없이 한 지점에서 다른 지점으로 이동하는 단일 원이어야 함)를 새 게시물에 작성하십시오. 행운을 빕니다. –