Impulzy
Aplikuje okamžitou změnu linear nebo angular momentum Dynamic body.
Impulses používejte pro údery, skoky, exploze, recoil a jednorázové interakce. Na rozdíl od force se impulse aplikuje jednou a nenásobí se délkou simulačního kroku.
High-Level API#
body.add_impulse(x, y, z)
body.add_impulse_at_position(ix, iy, iz, px, py, pz)
body.add_impulse_local(ix, iy, iz, local_x, local_y, local_z)
body.add_angular_impulse(x, y, z)Souřadnicové prostory#
| Metoda | Prostor impulzu | Bod aplikace |
|---|---|---|
| add_impulse | World-space | Těžiště |
| add_impulse_at_position | World-space | World-space bod |
| add_impulse_local | World-space | Lokální bod převedený body rotací a originem |
| add_angular_impulse | World-space angular impulse | Přímá rotace |
Local helper transformuje pouze bod; impulse vektor zůstává world-space. Impulse mimo těžiště mění linear i angular velocity. Všechny komponenty musí být konečné.
Impulse vs. force#
| Vlastnost | Force | Impulse |
|---|---|---|
| Aplikace | Obvykle každý step | Jednou |
| Závislost na čase | Integruje se přes timestep | Okamžitá změna momentum |
| Typická jednotka | N | N·s nebo kg·m/s |
| Typické použití | Thruster, přitažlivost, drag | Úder, skok, recoil |
Příklad#
// Jednorázové okamžité vystřelení.
body.add_impulse(0, 0, 12);
// Roztočení zásahem mimo střed.
body.add_impulse_local(8, 0, 3, 0, -0.6, -0.4);
// Přímé angular momentum.
body.add_angular_impulse(0, 0, 2.5);Low-Level / Advanced API#
Low-level at_position používá world-space bod. add_impulse_local implementuje high-level wrapper.
Settery vracejí true při úspěchu a false při neplatném vstupu, invalidním nebo stale body či nepodporovaném motion typu. Gettery vracejí požadovanou hodnotu nebo undefined při selhání. High-level chybu zjistíte přes jolt_get_error().
Ověřené kontrakty operací#
Následující kontrakty rozlišují jednotky, návratové hodnoty, chyby a životnost podle aktuální implementace. Nevynechávej kontrolu výsledku: false, 0 a undefined mohou mít u různých metod odlišný význam.
| Symbol / vlastník | Signatura | Kontrakt operace |
|---|---|---|
| JoltBody.add_angular_impulse | JoltBody.add_angular_impulse(x, y, z) | Boolean; Dynamic těleso, světový moment N·m / úhlový impuls N·m·s. Moment je krokový, impuls jednorázový. |
| JoltBody.add_impulse | JoltBody.add_impulse(x, y, z) | Boolean; Dynamic těleso, jednorázový světový impuls XYZ v N·s. at_position světový bod, local pouze bod vůči originu; vektor impulsu zůstává světový. |
| JoltBody.add_impulse_at_position | JoltBody.add_impulse_at_position(ix, iy, iz, px, py, pz) | Boolean; Dynamic těleso, jednorázový světový impuls XYZ v N·s. at_position světový bod, local pouze bod vůči originu; vektor impulsu zůstává světový. |