2012-09-11 15 views
8

Tôi đã bắt đầu sử dụng công cụ jMonkey gần đây, điều này rất hay. Nhưng tôi đã bị mắc kẹt cố gắng để thực hiện trọng lực tương đối.Tỷ trọng tương đối

Tôi muốn làm cho các hành tinh quay quanh nhau (không nhất thiết phải trong quỹ đạo tròn hoàn hảo, phụ thuộc vào vận tốc). Vì vậy, mọi đối tượng nên ảnh hưởng đến các đối tượng khác.

Những gì tôi có ngay bây giờ:

tắt trọng lực toàn cầu

bulletAppState.getPhysicsSpace().setGravity(Vector3f.ZERO); 

khởi tạo các lĩnh vực và thêm vào không gian vật lý

Sphere sphere = new Sphere(50, 50, 5); 
Geometry sun = new Geometry("Sun", sphere); 

sun.setMaterial(stone_mat); 
rootNode.attachChild(sun); 
sun.setLocalTranslation(0, 0, 0); 

sunPhysics = new RigidBodyControl((float) (50*Math.pow(10, 5))); 
sun.addControl(sunPhysics); 
bulletAppState.getPhysicsSpace().add(sunPhysics); 

Geometry mercury = new Geometry("Mercury", sphere); 

mercury.setMaterial(stone_mat); 
rootNode.attachChild(mercury); 
mercury.setLocalTranslation(15f, 0, 0); 

mercuryPhysics = new RigidBodyControl((float) (5)); 
mercury.addControl(mercuryPhysics); 
bulletAppState.getPhysicsSpace().add(mercuryPhysics); 

tôi nhận thấy rằng có phương pháp setGravity trong lớp RigidBodyControl, nhưng nó chỉ định hướng. Vì vậy, đối tượng đi theo cách đó cho đến khi nó biến mất.

Tôi thực sự mong chờ câu trả lời.

Trả lời

1

Lực hấp dẫn trong bản đồ là một hướng cho tất cả các đối tượng.

Bạn nên đặt trọng lực để 0 như bạn đã làm và áp dụng vũ lực quá tất cả các đối tượng sau mỗi bước mô phỏng sử dụng công thức sau

F = m * a 

F - force 
m - objects mass 
a - acceleration 

tăng tốc thường xuyên trên trái đất được g == 9.8

Trong khả năng tăng tốc không gian có thể mỗi phụ thuộc vào khoảng cách từ hành tinh hay hành tinh.

Nếu bạn muốn mô phỏng trò chơi như Angry Birds Space sau đó bạn nên xem xét đọc bài viết về lực hấp dẫn ở chỗ trò chơi http://www.wired.com/wiredscience/2012/03/the-gravitational-force-in-angry-birds-space/

+0

Bạn có thể áp dụng lực với phương pháp applyCentralForce – Max

+0

Cảm ơn, tôi cho rằng có thể có cách "đơn giản hơn" để thực hiện điều đó.Nhưng không có vấn đề, tôi sẽ thử nó theo cách bạn đề nghị :) –

0

Nếu bạn muốn hệ thống ổn định, không sử dụng vật lý mô phỏng. (Nhưng nếu hệ thống có đủ cơ quan quan trọng, không ai biết cách nó nên hành xử, vì vậy nó không quan trọng).

Đối với những thứ như hệ mặt trời, tôi sẽ sử dụng chế độ động học cho các hành tinh (di chuyển chúng) và cho các tàu, tiểu hành tinh, vv sử dụng các lực lượng. (Trừ khi bạn thực hiện biliard trong hệ thống năng lượng mặt trời)

3

Các định luật hấp dẫn nói F = G (m1 * m2)/r^2 nơi m1m2 là khối lượng của hai cơ quan, và r là khoảng cách. G là hằng số hấp dẫn.

luật thứ hai của Newton nói F = m * a, vì vậy nếu chúng ta đặt chúng lại với nhau, cơ thể với hàng loạt m1 sẽ trải nghiệm một khả năng tăng tốc của a = G * m2/r^2 từ lực hấp dẫn từ cơ thể với hàng loạt m2.

Bây giờ, những gì bạn phải làm là: Trong mỗi bước mô phỏng, cho mỗi cơ thể, tổng hợp a s cho mỗi cơ thể khác và áp dụng gia tốc đó cho vận tốc của cơ thể.

a(body1) = G * sum[ mass(body2)/dist(body1, body2)^2 , for each body2 ] 
Các vấn đề liên quan