mirror of
https://github.com/peter-tanner/starcore-explorer-bad.git
synced 2024-12-03 02:20:28 +08:00
131 lines
3.6 KiB
Plaintext
131 lines
3.6 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"id": "82ae535a-a041-40f0-8c40-e689b894b0bc",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import sys\n",
|
|
"if \"pyodide\" in sys.modules:\n",
|
|
" import piplite\n",
|
|
" await piplite.install('pyb2d-jupyterlite-backend>=0.4.0')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "7381ff66-7924-4216-b141-8f7b15ed038a",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from b2d.testbed import TestbedBase\n",
|
|
"import b2d\n",
|
|
"\n",
|
|
"\n",
|
|
"class NewtonsCradle(TestbedBase):\n",
|
|
"\n",
|
|
" name = \"newton's cradle\"\n",
|
|
"\n",
|
|
" def __init__(self, settings=None):\n",
|
|
" super(NewtonsCradle, self).__init__(settings=settings)\n",
|
|
"\n",
|
|
" # radius of the circles\n",
|
|
" r = 1.0\n",
|
|
" # length of the rope\n",
|
|
" l = 10.0\n",
|
|
" # how many balls\n",
|
|
" n = 10\n",
|
|
"\n",
|
|
" offset = (l + r, 2 * r)\n",
|
|
" dynamic_circles = []\n",
|
|
" static_bodies = []\n",
|
|
" for i in range(n):\n",
|
|
" if i + 1 == n:\n",
|
|
" position = (offset[0] + i * 2 * r + l, offset[1] + l)\n",
|
|
" else:\n",
|
|
" position = (offset[0] + i * 2 * r, offset[1])\n",
|
|
"\n",
|
|
" circle = self.world.create_dynamic_body(\n",
|
|
" position=position,\n",
|
|
" fixtures=b2d.fixture_def(\n",
|
|
" shape=b2d.circle_shape(radius=r * 0.90),\n",
|
|
" density=1.0,\n",
|
|
" restitution=1.0,\n",
|
|
" friction=0.0,\n",
|
|
" ),\n",
|
|
" linear_damping=0.01,\n",
|
|
" angular_damping=1.0,\n",
|
|
" fixed_rotation=True,\n",
|
|
" )\n",
|
|
" dynamic_circles.append(circle)\n",
|
|
"\n",
|
|
" static_body = self.world.create_static_body(\n",
|
|
" position=(offset[0] + i * 2 * r, offset[1] + l)\n",
|
|
" )\n",
|
|
"\n",
|
|
" self.world.create_distance_joint(\n",
|
|
" static_body,\n",
|
|
" circle,\n",
|
|
" local_anchor_a=(0, 0),\n",
|
|
" local_anchor_b=(0, 0),\n",
|
|
" max_length=l,\n",
|
|
" stiffness=0,\n",
|
|
" )\n",
|
|
"\n",
|
|
" static_bodies.append(static_body)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "6f694d32-8b23-40cf-91c3-0edd6abb658d",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"application/vnd.jupyter.widget-view+json": {
|
|
"model_id": "b24ad88f6cfd4db19fc3145000e79635",
|
|
"version_major": 2,
|
|
"version_minor": 0
|
|
},
|
|
"text/plain": [
|
|
"Output()"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"from pyb2d_jupyterlite_backend.async_jupyter_gui import JupyterAsyncGui\n",
|
|
"s = JupyterAsyncGui.Settings()\n",
|
|
"s.resolution = [1000,300]\n",
|
|
"b2d.testbed.run(NewtonsCradle, backend=JupyterAsyncGui, gui_settings=s);"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3 (ipykernel)",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.10.4"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|