Paths
Hladké cesty
Sestaví kubickou Hermite křivku a poskytne sampling podle vzdálenosti.
build_smooth() doplní tangenty, vytvoří nativní PathConstraintPathHermite, přenáší stabilní normal podél křivky, aplikuje roll jednotlivých bodů a připraví přibližnou tabulku délky oblouku.
Syntaxe#
track.build_smooth(smoothness=1.0);Požadavky#
| Vlastnost | Požadavek |
|---|---|
| smoothness | Konečné číslo větší než 0 a nejvýše 4. |
| otevřená cesta | Nejméně 2 control points. |
| uzavřená cesta | Nejméně 3 control points. |
| segmenty | Sousední pozice se musí lišit. |
Pravidlo automatických tangent#
- Vnitřní body otevřené cesty a všechny body loopu používají 0.5 × smoothness × (next − previous).
- Koncové body otevřené cesty používají smoothness násobené sousedním segmentem.
- Tangenty z add_point_tangent() zůstávají beze změny.
Sampling podle délky oblouku#
var midpoint = track.get_position(0.5);
var direction = track.get_direction(0.5);
var distance = track.get_length() * 0.25;
var position = track.get_position_at_distance(distance);
var tangent = track.get_direction_at_distance(distance);Veřejná fraction představuje normalizovanou přibližnou délku oblouku, ne surový Hermite parametr segmentu. Hodnota 0.5 je proto fyzický střed cesty.
Frame a prostorové dotazy#
var euler = track.get_rotation(0.5);
var quaternion = track.get_rotation_quaternion(0.5);
var nearest = track.get_closest_point(x, y, z);
var bounds = track.get_bounds();| Closest-point field | Význam |
|---|---|
| position | Nejbližší Hermite pozice. |
| distance | World-space vzdálenost od dotazu. |
| fraction | Normalizovaná část délky. |
| path_distance | Vzdálenost podél cesty. |
| direction | Tangenta v nejbližší pozici. |
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 |
|---|---|---|
| JoltPath.build_smooth | JoltPath.build_smooth(smoothness = 1.0) | Boolean; smoothness(0, 4] default 1, alespoň2 body otevřené/3 loop. Dopočítá neexplicitní tangenty a vytvoří nový native resource. Neplatný build neposkytuje vzorkování. |
| JoltPath.get_bounds | JoltPath.get_bounds() | Po build: délka m (chyba0), bounds kopie min_x/y/z, max_x/y/z (chyba undefined) v souřadnicích path. |
| JoltPath.get_closest_point | JoltPath.get_closest_point(x, y, z) | XYZ v souřadnicích path, po build; snapshot {position, distance, fraction, path_distance, direction}. Distance od dotazu a path_distance podél křivky v m; chyba undefined. |
| JoltPath.get_direction | JoltPath.get_direction(fraction) | Vyžaduje aktuální build; fraction0..1 nebo konečná vzdálenost m. Vrací {x, y, z} pozice m / jednotková tečna v souřadnicích path, undefined při odmítnutí. |
| JoltPath.get_direction_at_distance | JoltPath.get_direction_at_distance(distance) | Vyžaduje aktuální build; fraction0..1 nebo konečná vzdálenost m. Vrací {x, y, z} pozice m / jednotková tečna v souřadnicích path, undefined při odmítnutí. |
| JoltPath.get_length | JoltPath.get_length() | Po build: délka m (chyba0), bounds kopie min_x/y/z, max_x/y/z (chyba undefined) v souřadnicích path. |
| JoltPath.get_position | JoltPath.get_position(fraction) | Vyžaduje aktuální build; fraction0..1 nebo konečná vzdálenost m. Vrací {x, y, z} pozice m / jednotková tečna v souřadnicích path, undefined při odmítnutí. |
| JoltPath.get_position_at_distance | JoltPath.get_position_at_distance(distance) | Vyžaduje aktuální build; fraction0..1 nebo konečná vzdálenost m. Vrací {x, y, z} pozice m / jednotková tečna v souřadnicích path, undefined při odmítnutí. |
| JoltPath.get_rotation | JoltPath.get_rotation(fraction) | Fraction0..1 po build; quaternion XYZW pouze u get_rotation_quaternion. get_rotation i get_rotation_euler vrací Euler XYZ°! undefined při chybě. |
| JoltPath.get_rotation_euler | JoltPath.get_rotation_euler(fraction) | Fraction0..1 po build; quaternion XYZW pouze u get_rotation_quaternion. get_rotation i get_rotation_euler vrací Euler XYZ°! undefined při chybě. |
| JoltPath.get_rotation_quaternion | JoltPath.get_rotation_quaternion(fraction) | Fraction0..1 po build; quaternion XYZW pouze u get_rotation_quaternion. get_rotation i get_rotation_euler vrací Euler XYZ°! undefined při chybě. |