Böfferich: Grafikprogrammierung - Richtung

hi,
ich habe eine Frage hinsichtlich Grafikprogrammierung. Gegegeben sei ein Feld von 300 x 300 px, welches als Canvas dient. Auf diesem Canvas befindet sich ein Kreis (20 x 20 px), der sich immer dorthin bewegt, wo ein Mouse-Click auf den Canvas stattfand. Dieser Kreis simuliert eine Kugel. Die genannten Dimensionen spielen für meine Frage keine Rolle.

Nun, wie mache ich das richtig? Mein bisheriger Ansatz ist wie folgt:

  
endX // die durch Mausklick definierte X-Position auf dem Canvas  
endY // die durch Mausklick definierte Y-Position auf dem Canvas  
  
loop(  
if(ball.x != endX) {  
      if(endX > ball.x)ball.x++;  
      if(endX < ball.x)ball.x--;  
  }  
  
  if(ball.y != endY) {  
      if(endY > ball.y)ball.y++;  
      if(endY < ball.y)ball.y--;  
  }  
)  

Klar kommt der Kreis (Ball) am Ziel an, allerdings nicht geradlinig! Irgendwas übersehe ich, ich kenne mich leider mit Grafikprogrammierung nicht aus und weiß nicht genau, nach was ich suchen muss... ist Richtungsvektor das richtige Stichwort? Hat jemand einen Tip für mich?

Grüße
der Böfferich

  1. hi,
    ich habe eine Frage hinsichtlich Grafikprogrammierung. Gegegeben sei ein Feld von 300 x 300 px, welches als Canvas dient. Auf diesem Canvas befindet sich ein Kreis (20 x 20 px), der sich immer dorthin bewegt, wo ein Mouse-Click auf den Canvas stattfand. Dieser Kreis simuliert eine Kugel. Die genannten Dimensionen spielen für meine Frage keine Rolle.

    Nun, wie mache ich das richtig? Mein bisheriger Ansatz ist wie folgt:

    endX // die durch Mausklick definierte X-Position auf dem Canvas
    endY // die durch Mausklick definierte Y-Position auf dem Canvas

    loop(
    if(ball.x != endX) {
          if(endX > ball.x)ball.x++;
          if(endX < ball.x)ball.x--;
      }

    if(ball.y != endY) {
          if(endY > ball.y)ball.y++;
          if(endY < ball.y)ball.y--;
      }
    )

    
    >   
    > Klar kommt der Kreis (Ball) am Ziel an, allerdings nicht geradlinig! Irgendwas übersehe ich, ich kenne mich leider mit Grafikprogrammierung nicht aus und weiß nicht genau, nach was ich suchen muss... ist Richtungsvektor das richtige Stichwort? Hat jemand einen Tip für mich?  
      
    Das ist logisch. Durch deine simple in/dekrementierung durch ganze wasauchuimmerixel kommen letztlich acht mögliche Bewegungsrichtungen zustande.  
      
    Du willst bitte zuerst die Richtung definieren also deltaX und deltaY und um einen Bruchteil derselben inkrementieren.  
      
    mfg Beat
    
    -- 
    
    ><o(((°>           ><o(((°>  
    
       <°)))o><                     ><o(((°>o  
    Der Valigator leibt diese Fische
    
    1. Hi Beat,

      richtig, völliger Quatsch was ich da gemacht habe. Alles klar, ich hab's geschnallt.

      Schaut dann so aus und funktioniert:

        
        
      loop(  
        
        endX = mouseX;  
        endY = mouseY;  
        
        deltaX = endX - ball.x;  
        deltaY = endY - ball.y;  
        float dem = sqrt( deltaX*deltaX + deltaY*deltaY);  
        
        
          deltaX = deltaX / dem * 1;  
          deltaY = deltaY / dem * 1;  
        
          ball.x = ball.x + deltaX;  
          ball.y = ball.y + deltaY;  
        
      )  
      
      

      Danke für den Tip.
      Böfferich