2016-03-22 13 views
-3

A Pool Game: The QuestionBu Havuz Oyunu'nu nasıl çözersiniz?

Cevabın B olduğunu biliyorum, ama neden olduğu konusunda emin değilim. Birisi cevabını bulma sürecini açıklayabilir veya muhtemelen bir simülasyon gösterebilirse, bu harika olurdu.

Teşekkür ederiz.

+0

Sence ne olacak? Bu genel bir problemi çözmek için bir program yazmak istemediğiniz sürece, bu bir fizik sorusudur. Bu durumda, olabildiğince fazla program yazmak ve daha sonra buraya göndermek istersiniz. – Teepeemm

+0

Bu soruyu konu dışı olarak kapatmak için oy veriyorum çünkü programlama ile ilgili değil. –

cevap

1

Bilye tablasını masa boyunca takip edebilirsiniz. Bunu kolaylaştıran nokta, topun 45 ° 'lik bir yönde başlamasıdır. Böylece tüm çarpışma açıları 45 ° olacak. Bu nedenle, topun yön vektörünün sadece bir bileşenini ters çevirmeniz gerekir.

Bazı C# örnek kodları. Koordinat sisteminin kaynağı, tablonun sol alt köşesindedir. Aşağıdaki yolda

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); 
} 

kod sonuçları:

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. 

Ve (225/125) de cebi (gerçek olsun top genişliği eklemek top konumu, sınırlayıcı kutusu' sol alt köşesine ölçülür pozisyon) B