ars / tests / physics.py

import math

from ars.app import Program


def sphere_volume(radius):
	return 4.0/3.0 * math.pi * (radius ** 3)


class BodyTest1(Program):
	def create_sim_objects(self):
		self.sim.add_sphere(0.5, (1,10,1), density=1) # radius, center, density


class BodyTest2(Program):
	def create_sim_objects(self):
		self.sim.add_cylinder(length=1.0, radius=1.0, center=(10,10,25), mass=4.67)


class BodyTest3(Program):
	def create_sim_objects(self):
		self.sim.add_sphere(0.5, (1,10,1), mass=1) # radius, center, mass


def run_body_test():

	# body.get_center_of_gravity() is always (0,0,0) unless changed explicitly

	sim_program = BodyTest1()
	sim_program.start()
	body = sim_program.sim.get_object("sphere").body
	print(body.get_position())
	print('%s / %s' % (1.0 * sphere_volume(0.5), body.get_mass()))
	print(body.get_inertia_tensor())

	sim_program = BodyTest2()
	sim_program.start()
	body = sim_program.sim.get_object("cylinder").body
	print(body.get_position())
	print('%s / %s' % (4.67, body.get_mass()))
	print(body.get_inertia_tensor())

	sim_program = BodyTest3()
	sim_program.start()
	body = sim_program.sim.get_object("sphere").body
	print(body.get_position())
	print('%s / %s' % (1.0, body.get_mass()))
	print(body.get_inertia_tensor())

if __name__ == '__main__':
	run_body_test()
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.