2016-03-22 17 views
-3

A Pool Game: The QuestionWie lösen Sie dieses Poolspiel?

Ich weiß, die Antwort ist B, aber ich bin unklar, warum es so ist. Wenn jemand den Prozess, die Antwort zu finden oder eine Simulation zu zeigen, freundlicherweise erklären könnte, wäre das großartig.

Vielen Dank.

+0

Was denkst du wird passieren? Dies ist eher eine Frage der Physik, es sei denn, Sie wollen ein Programm schreiben, um diese Art von Problem im Allgemeinen zu lösen. In diesem Fall möchten Sie so viel wie möglich vom Programm schreiben und dann hier posten. – Teepeemm

+0

Ich stimme ab, diese Frage als Off-Topic zu schließen, weil es nicht um Programmierung geht. –

Antwort

1

Sie können den Ballpfad über den Tisch verfolgen. Der Punkt, der das leicht macht, ist, dass der Ball in einer Richtung von 45 ° beginnt. Somit sind alle Kollisionswinkel 45 °. Daher musst du nur eine Komponente des Richtungsvektors des Balls invertieren.

Hier ist ein Beispielcode für C#. Der Ursprung des Koordinatensystems befindet sich in der unteren linken Ecke der Tabelle. Die Kugelposition an seinem Begrenzungsrahmen‘linke untere Ecke gemessen:

int ballX = 0; 
int ballY = 0; 
int ballWidth = 5; 
int tableWidth = 230; 
int tableHeight = 130; 

int directionX = 1; 
int directionY = 1; 

while(true) 
{ 
    //the distances that the ball could travel until it collides with a vertical or horizontal border, respectively 
    int travelDistanceX, travelDistanceY; 
    if (directionX > 0) 
     travelDistanceX = tableWidth - ballWidth - ballX; 
    else 
     travelDistanceX = ballX; 

    if (directionY > 0) 
     travelDistanceY = tableHeight - ballWidth - ballY; 
    else 
     travelDistanceY = ballY; 

    if(travelDistanceX == travelDistanceY) 
    { 
     //we found the target pocket: 
     Console.WriteLine("Target is located at {0}/{1}.", ballX + travelDistanceX * directionX, ballY + travelDistanceY * directionY); 
     break; 
    } 

    if(travelDistanceX < travelDistanceY) 
    { 
     //collision with the vertical borders 
     ballX += travelDistanceX * directionX; 
     ballY += travelDistanceX * directionY; 
     directionX *= -1; 
    } 
    else 
    { 
     //collision with the horizontal borders 
     ballX += travelDistanceY * directionX; 
     ballY += travelDistanceY * directionY; 
     directionY *= -1; 
    } 
    Console.WriteLine("Collision at {0}/{1}.", ballX, ballY); 
} 

Die Code Ergebnisse in dem folgenden Pfad:

Collision at 125/125. 
Collision at 225/25. 
Collision at 200/0. 
Collision at 75/125. 
Collision at 0/50. 
Collision at 50/0. 
Collision at 175/125. 
Collision at 225/75. 
Collision at 150/0. 
Collision at 25/125. 
Collision at 0/100. 
Collision at 100/0. 
Target is located at 225/125. 

Und die Tasche an (225/125) (den Ball Breite fügen Sie die tatsächlichen bekommen Position) ist B.

Verwandte Themen