2008-09-30 28 views
20

Làm cách nào để tính toán vị trí của cơ thể tăng tốc (ví dụ: ô tô) sau một thời gian nhất định (ví dụ: 1 giây)?Tính vị trí của một cơ thể tăng tốc sau một thời điểm nhất định

Đối với một cơ thể chuyển động mà nó không tăng tốc, nó là một mối quan hệ tuyến tính, vì vậy tôi cho rằng một cơ thể tăng tốc nó liên quan đến một hình vuông ở đâu đó.

Bất kỳ ý tưởng nào?

+0

Câu hỏi này dường như là off-topic vì nó là về Toán, không phải lập trình. –

Trả lời

32

Phương trình là: s = ut + (1/2) t^2

đó s là vị trí, u là vận tốc tại t = 0, t là thời gian và là một gia tốc không đổi.

Ví dụ, nếu một chiếc xe bắt đầu giảm giá văn phòng phẩm, và tăng tốc trong hai giây với khả năng tăng tốc 3m/s^2, nó di chuyển (1/2) * 3 * 2^2 = 6m

Phương trình này đến từ việc tích phân phân tích các phương trình cho biết vận tốc là tốc độ thay đổi vị trí, và gia tốc là tốc độ thay đổi vận tốc.

Thông thường trong một tình huống trò chơi lập trình, người ta sẽ sử dụng một công thức hơi khác nhau: tại mỗi khung hình, các biến cho vận tốc và vị trí được tích hợp không phân tích, nhưng số lượng:

s = s + u * dt; 
u = u + a * dt; 

nơi dt là độ dài của một khung hình (được đo bằng bộ đếm thời gian: 1/60 giây hoặc hơn). Phương pháp này có lợi thế là khả năng tăng tốc có thể thay đổi theo thời gian.

Chỉnh sửa Một vài người đã lưu ý rằng phương pháp tích hợp số Euler (như được hiển thị ở đây), mặc dù đơn giản nhất để minh họa, có độ chính xác khá kém. Xem Velocity Verlet (thường được sử dụng trong trò chơi) và 4th order Runge Kutta (phương pháp 'chuẩn' cho các ứng dụng khoa học) cho các thuật toán được cải thiện.

+1

Đối với trò chơi 2D, bạn phải thực hiện điều này cho cả x và y (thay thế s), biết cả vận tốc và gia tốc theo hướng x và y. Thêm z cho vật lý 3D. –

+0

Cần lưu ý rằng phương pháp này được gọi là phương pháp Euler, và nói chung là một phương pháp rất thô với kết quả không chính xác ngay cả đối với các kích thước bước nhỏ. – freespace

+4

Nếu phương pháp này được sử dụng, bạn sẽ muốn cập nhật u trước, sau đó s (tức là sử dụng vận tốc mới được tính toán để có được vị trí, theo đường dẫn logic => velocity => vị trí dẫn xuất). – Alan

1

Bạn có thể google.Tôi đã thấy điều này: http://www.ugrad.math.ubc.ca/coursedoc/math101/notes/applications/velocity.html

Nhưng nếu bạn không muốn đọc, đó là:

p (t) = x (0) + v (0) * t + (1/2) một t^2

nơi

  • p (t) = vị trí tại thời điểm t
  • x (0) = vị trí tại thời điểm zero
  • v (0) = vận tốc lúc không (nếu bạn không có một vận tốc, bạn có thể bỏ qua thuật ngữ này)
  • a = gia tốc
  • t = itme hiện tại của bạn
1

Giả bạn đang làm việc với gia tốc không đổi, công thức là:

khoảng cách = (initial_velocity * thời gian) + (tốc * thời gian * thời gian)/2

nơi

khoảng cách là quãng đường đi

initial_velocity là vận tốc ban đầu (zero nếu cơ thể là intially nghỉ ngơi, vì vậy bạn có thể thả thuật ngữ này trong trường hợp đó)

thời gian là Hiện

tăng tốc là (không đổi) tăng tốc

Hãy chắc chắn rằng để sử dụng các đơn vị thích hợp khi tính, tức là mét, giây và cứ thế.

Một cuốn sách hay về chủ đề là Physics for Game Developers.

6

Vâng, nó phụ thuộc vào việc tăng tốc có hay không. Nếu đơn giản chỉ là

s = ut+1/2 at^2 

Nếu không phải là hằng số, bạn cần tích hợp số. Bây giờ có một loạt các phương pháp và không ai trong số họ sẽ đánh bại làm điều này bằng tay cho độ chính xác, vì họ là tất cả các giải pháp gần như gần đúng.

Cách dễ nhất và chính xác nhất là Euler's method. Ở đây bạn chia thời gian thành những phần rời rạc gọi là bước thời gian, và thực hiện

v[n] = v[n-1] * t * a[t] 

n là index, t là kích thước của một bước thời gian. Vị trí được cập nhật tương tự. Điều này chỉ thực sự tốt cho những trường hợp mà độ chính xác không phải là tất cả những điều quan trọng. Một phiên bản đặc biệt của phương pháp Euler sẽ mang lại một giải pháp chính xác cho chuyển động phóng (xem wiki), do đó, trong khi phương pháp này là thô, nó có thể là hoàn hảo cho một số suituations.

Phương pháp tích hợp số phổ biến nhất được sử dụng trong trò chơi và trong một số mô phỏng hóa học là Velocity Verlet, là một dạng đặc biệt của phương pháp Verlet chung chung hơn. Tôi muốn giới thiệu cái này nếu Euler quá thô.

+0

Đó là 'v [n] = v [n-1] + t * a [t]'. Thành phần 't * a [t]' được thêm * vào vận tốc trước đó, không nhân lên. – MestreLion

1

Giả sử gia tốc không đổi và vận tốc v0 ban đầu,

x(t) = (1/2 * a * t^2) + (v0 * t) 
Các vấn đề liên quan