Mô phỏng bóng nảy


8

In, trên STDOUT, một mẫu cho biết quả bóng nảy sẽ đi theo hướng nào.

Các giả định sau đây được đưa ra:

  • Quả bóng bắt đầu ở góc trên cùng bên trái: 0, 0với vận tốc ban đầu bằng không.
  • Trọng lực là 9.8ms^-2chính xác, về phía sàn (y dương.)
  • Quả bóng nặng 500gchính xác.
  • Quả bóng nảy ở góc 45 hoặc 135 độ so với sàn trừ khi bạn muốn thêm các phép tính thích hợp để thêm quỹ đạo thay đổi. (Điểm thưởng tùy ý!)
  • Bóng có một hệ số hằng số hồi phục / hằng số nảy 0.8chính xác.
  • Quả bóng hoàn toàn hình cầu và không biến dạng khi nảy.
  • Phòng cao 25 ​​ký tự, rộng 130 ký tự. Mỗi x và y là 1 mét và mỗi vị trí bóng đại diện cho một mẫu riêng biệt - khoảng thời gian chính xác là không xác định có chủ ý, nhưng màn hình sẽ làm cho đường đi của bóng đủ rõ ràng. Đầu ra phải hiển thị đường đi của bóng, không chỉ vị trí cuối cùng.
  • Sàn và bóng phải được chỉ định bằng các ký tự trên STDOUT, có thể giống nhau. Sự hiện diện của không có bóng hoặc bề mặt sàn phải được chỉ định bằng một ký tự khoảng trắng.
  • Bạn được phép làm tròn đến ba chữ số thập phân trong bất kỳ phép tính nào. (Các giải pháp sử dụng số nguyên hoàn toàn có thể đặc biệt quan tâm đến quy tắc này.)
  • Mô phỏng dừng lại khi bóng không di chuyển khỏi sàn hoặc nó rời khỏi phòng ( x > width of area.)
  • Chương trình phải mô phỏng đường đi của quả bóng, không chỉ đơn giản là tải nó từ một tệp hoặc mã hóa bằng cách nào đó trong chương trình. Thử nghiệm cho điều này sẽ là tùy ý thay đổi một trong các hằng số. Nếu chương trình không tính toán một kết quả mới, chính xác, thì nó không đủ điều kiện.

Ví dụ đầu ra:

*                                                                                                                                 
*                                                                                                                                 
*                                                                                                                                 
*                                                                                                                                 
*                                                                                                                                 
*                                                                                                                                 
*                                                                                                                                 
*                                                                                                                                 
*                                                                                                                                 
*                         ***********                                                                                             
*                    *****           ****                                                                                         
*                 ****                   ***                                                                                      
*               ***                        ***                                                                                    
*              **                             **                                                                                  
*           ***                                 **                                                                                
*          **                                     **                          *********                                           
*         *                                        **                      ****       ****                                        
*       **                                           *                   **               **                                      
*      *                                              **               **                   **                                    
*     *                                                 *            **                       **              ********            
*   **                                                   *          **                         **          ****      ****         
*  *                                                      **      **                             **       **            **        
* *                                                        **    **                               **    **                **    **
**                                                          **  **                                 **  **                  **  ** 
*                                                            ****                                   ****                    ***   
**********************************************************************************************************************************

Quyết tâm của người chiến thắng. Tôi sẽ chấp nhận câu trả lời:

  1. Đáp ứng các quy tắc như được xác định ở trên.
  2. Tiền thưởng kỳ công sẽ được xem xét.
  3. Là ngắn nhất và thanh lịch nhất (quyết định chủ quan.)

1
Là đầu vào và / hoặc tốc độ bắt đầu (năng lượng?), Hoặc tôi bị mù? Như tôi thấy bây giờ tôi chỉ có thể vẽ hộp và nói quả bóng đứng yên, hoặc gzip hình ảnh của bạn và hiển thị nó trên mỗi lần chạy.
shiona

1
nhưng nếu tôi quyết định quả bóng có tốc độ 0,0001 m / s (hoặc bất cứ thứ gì đủ nhỏ) theo hướng 45 °, quả bóng không thể rời khỏi mặt đất với độ phân giải bạn đã chọn. Tôi nghĩ rằng các vấn đề phải luôn luôn có một số loại đầu vào (người dùng, ngẫu nhiên, v.v.) để làm cho mã hóa cứng trở thành một câu trả lời duy nhất.
shiona

4
Là những ngôi sao bên trái trục y hay chúng đang đánh dấu đường đi của quả bóng? Nếu họ đánh dấu đường đi của quả bóng, mô phỏng vật lý này có vẻ hơi mơ hồ vì quả bóng không có thành phần chuyển động ở bên phải, vì vậy khi nảy trên sàn phẳng, nó sẽ nảy thẳng lên và không sang phải. Ngoài ra, các góc sẽ phẳng hơn trên mỗi lần nảy (nếu chúng ta có thành phần chuyển động ở bên phải).
Thomas W.

1
Đây có phải là code-golfhay code-challengehoặc những gì? Vui lòng gắn thẻ thích hợp.
Paul R

1
Cho rằng quả bóng bị rơi đơn giản, điều gì làm cho quả bóng di chuyển thẳng? Tại sao nó không đơn giản là di chuyển lên và xuống?
DavidC

Câu trả lời:


5

Python 143 byte

u=v=x=y=0
a=[[s]*130for s in' '*24+'*']
while x<129:
 if y+v>24:v*=-.8;u=-v
 v+=98e-4;x+=u;y+=v;a[int(y)][int(x)]=s
for r in a:print''.join(r)

Đường cong kết quả hơi khác so với ví dụ, nhưng điều này là do vận tốc được điều chỉnh trước khi bóng đi xuống sàn, thay vì sau khi nó đã có.

*                                                                                                                                 
*                                                                                                                                 
*                                                                                                                                 
*                                                                                                                                 
*                                                                                                                                 
*                                                                                                                                 
*                                                                                                                                 
*                                                                                                                                 
*                                                                                                                                 
*                     ***************                                                                                             
*                 ****               ****                                                                                         
*               ***                     ***                                                                                       
*             **                           **                                                                                     
*           ***                              **                                                                                   
*         **                                   **                          ******                                                 
*        **                                     **                     ****     *****                                             
*       *                                         **                 ***             ***                                          
*     **                                           **              **                  **                                         
*    *                                               *           **                      **            *********                  
*   *                                                 **        **                        **         ***       ***                
*  *                                                   **     **                            **     ***           **        *****  
* *                                                     **   **                              **   **               **   ***    ***
**                                                       ** **                                ** **                 ** **         
*                                                         ***                                   **                   ***          
**********************************************************************************************************************************

Python 132 byte

Một phiên bản thực tế hơn, bắt đầu với vận tốc x không đổi :

v=x=y=0
a=[[s]*130for s in' '*24+'*']
while x<129:v=(y+v<24or-.8)*v+98e-4;x+=.3;y+=v;a[int(y)][int(x)]=s
for r in a:print''.join(r)

Sản xuất:

****                                                                                                                              
    **                                                                                                                            
     ***                                                                                                                          
       **                                                                                                                         
        **                                                                                                                        
         **                                                                                                                       
          **                                                                                                                      
           *                                                                                                                      
            *                                                                                                                     
            **                   *********                                                                                        
             *                 **        **                                                                                       
              *              **            **                                                                                     
              **            **              **                                                                                    
               *           **                **                                                                                   
               **         **                  **                *****                                                             
                *        **                    **             ***   ****                                                          
                 *       *                      **          **         **                                                         
                 **     *                        *         **            **                                                       
                  *    **                         *       *               **          *******                                     
                  *    *                          **    **                 **      ***       **                                   
                   *  *                            *    *                   **    **           **       *******                   
                   * **                             *  *                     *   **             **    ***     ***      ****       
                    **                              ***                       * *                ** **          **  ****  ****    
                    **                               **                        **                 ***             ***        *****
**********************************************************************************************************************************

Xin chúc mừng, thật tuyệt vời!
rubik

1

Tôi sẽ gửi giải pháp của riêng tôi trong Python. Chỉ đơn giản hóa một chút; Tôi chắc chắn có nhiều cách tốt hơn để làm điều đó! 282 280 ký tự. Đầu ra ví dụ trong bài đăng câu hỏi đã được tạo bằng chương trình này.

import sys;o=sys.stdout.write
py=px=vy=vx=0;g=98e-4;h=25;w=130;k=.8;p=[]
while 1:
 vy+=g;py+=vy;px+=vx
 if py>h:vy=-vy*k;vx=-vy
 if px>w:break
 p.append([int(px),int(py)])
py=0
while py<=h:
 px=0
 while px<w:
  if [px,py] in p or py==h:o('*')
  else:o(' ')
  px+=1
 o('\n');py+=1

5
Cách bóng của bạn "nảy luôn 45 độ" là rất phi vật lý. Cách bình thường và hợp lý để mô phỏng một quả bóng nảy trong 2D là để thành phần x của hằng số vận tốc và chỉ phản chiếu thành phần y (nghĩa là tính toán lực đẩy vuông góc với bề mặt nhưng bỏ qua ma sát tiếp xúc với nó). Bạn không cần bất kỳ hàm lượng giác hoặc tương tự để làm điều đó!
đã ngừng quay ngược chiều
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.