tritium demo paper_plane
transcript ·
python ·
c ·
rust
# TRITIUM-PROVENANCE sha256=7ab3f2fa4f8df8640be261938568a4bd5a768201d8fa662258c66b76d58f2c1d lang=python
# TRITIUM-HEIGHT high=0.20 mid=0.51 low=0.29 fns=16
# TRITIUM-PSEUDO fn=fsin
#| fn fsin(x):
#| return a * (1.0 + x2 * (-0.16666666666666666 + x2 * (0.008333333333333333 + x2 * (-0.0001984126984126984 + x2 * 2.7557319223985893e-06))))
# TRITIUM-HEIGHT fn=fsin high=0.00 mid=0.44 low=0.56 role=algo_mid
def fsin(x: float) -> float:
pi = 3.141592653589793
two = 6.283185307179586
a = x
while a > pi:
a = a - two
while a <= -pi:
a = a + two
x2 = a * a
return a * (1.0 + x2 * (-0.16666666666666666 + x2 * (0.008333333333333333 + x2 * (-0.0001984126984126984 + x2 * 2.7557319223985893e-06))))
# TRITIUM-PSEUDO fn=fcos
#| fn fcos(x):
#| return 1.0 + x2 * (-0.5 + x2 * (0.041666666666666664 + x2 * (-0.001388888888888889 + x2 * 2.48015873015873e-05)))
# TRITIUM-HEIGHT fn=fcos high=0.00 mid=0.44 low=0.56 role=algo_mid
def fcos(x: float) -> float:
pi = 3.141592653589793
two = 6.283185307179586
a = x
while a > pi:
a = a - two
while a <= -pi:
a = a + two
x2 = a * a
return 1.0 + x2 * (-0.5 + x2 * (0.041666666666666664 + x2 * (-0.001388888888888889 + x2 * 2.48015873015873e-05)))
# TRITIUM-PSEUDO fn=fsqrt
#| fn fsqrt(x):
#| return g
# TRITIUM-HEIGHT fn=fsqrt high=0.00 mid=0.63 low=0.37 role=algo_mid
def fsqrt(x: float) -> float:
if x <= 0.0:
return 0.0
g = x
i = 0
while i < 8:
g = 0.5 * (g + x / g)
i = i + 1
return g
# TRITIUM-PSEUDO fn=haversine_f
#| fn haversine_f(lat1, lon1, lat2, lon2):
#| fsin(...)
#| fsqrt(...)
#| fcos(...)
#| return 2.0 * fsqrt(h)
# TRITIUM-HEIGHT fn=haversine_f high=0.75 mid=0.25 low=0.00
def haversine_f(lat1: float, lon1: float, lat2: float, lon2: float) -> float:
dlat = lat2 - lat1
dlon = lon2 - lon1
aa = fsin(dlat / 2.0)
bb = fsin(dlon / 2.0)
h = aa * aa + fcos(lat1) * fcos(lat2) * bb * bb
return 2.0 * fsqrt(h)
# TRITIUM-PSEUDO fn=haversine_km_f
#| fn haversine_km_f(lat1, lon1, lat2, lon2):
#| return 6371.0 * haversine_f(lat1, lon1, lat2, lon2)
# TRITIUM-HEIGHT fn=haversine_km_f high=1.00 mid=0.00 low=0.00
def haversine_km_f(lat1: float, lon1: float, lat2: float, lon2: float) -> float:
return 6371.0 * haversine_f(lat1, lon1, lat2, lon2)
# TRITIUM-PSEUDO fn=_atan_unit
#| fn _atan_unit(a):
#| return r
# TRITIUM-HEIGHT fn=_atan_unit high=0.00 mid=1.00 low=0.00 role=algo_mid
def _atan_unit(a: float) -> float:
t8 = 0.41421356237309503
folded = 0
t = a
if t > t8:
t = (1.0 - t) / (1.0 + t)
folded = 1
z2 = t * t
r = t * (1.0 + z2 * (-0.3333333333333333 + z2 * (0.2 + z2 * (-0.14285714285714285 + z2 * (0.1111111111111111 + z2 * -0.09090909090909091)))))
if folded == 1:
r = 0.7853981633974483 - r
return r
# TRITIUM-PSEUDO fn=fatan_poly
#| fn fatan_poly(z):
#| _atan_unit(...)
#| return r
# TRITIUM-HEIGHT fn=fatan_poly high=0.13 mid=0.87 low=0.00
def fatan_poly(z: float) -> float:
neg = 0
a = z
if a < 0.0:
a = 0.0 - a
neg = 1
swapped = 0
if a > 1.0:
a = 1.0 / a
swapped = 1
r = _atan_unit(a)
if swapped == 1:
r = 1.5707963267948966 - r
if neg == 1:
r = 0.0 - r
return r
# TRITIUM-PSEUDO fn=fatan2
#| fn fatan2(y, x):
#| fatan_poly(...)
# TRITIUM-HEIGHT fn=fatan2 high=0.19 mid=0.81 low=0.00 role=algo_mid
def fatan2(y: float, x: float) -> float:
ay = y
if ay < 0.0:
ay = 0.0 - ay
ax = x
if ax < 0.0:
ax = 0.0 - ax
if ax >= ay:
if ax == 0.0:
return 0.0
a = fatan_poly(ay / ax)
else:
if ay == 0.0:
return 0.0
a = 1.5707963267948966 - fatan_poly(ax / ay)
if x < 0.0:
if y < 0.0:
return a - 3.141592653589793
return 3.141592653589793 - a
else:
if y < 0.0:
return 0.0 - a
return a
# TRITIUM-PSEUDO fn=bearing_f
#| fn bearing_f(lat1, lon1, lat2, lon2):
#| fsin(...)
#| fcos(...)
#| fatan2(...)
#| return br
# TRITIUM-HEIGHT fn=bearing_f high=0.69 mid=0.31 low=0.00
def bearing_f(lat1: float, lon1: float, lat2: float, lon2: float) -> float:
dlon = lon2 - lon1
sd = fsin(dlon)
cl2 = fcos(lat2)
y = sd * cl2
cl1 = fcos(lat1)
sl2 = fsin(lat2)
sl1 = fsin(lat1)
cl2b = fcos(lat2)
cd = fcos(dlon)
x = cl1 * sl2 - sl1 * cl2b * cd
br = fatan2(y, x)
return br
# TRITIUM-PSEUDO fn=bearing_deg_f
#| fn bearing_deg_f(lat1, lon1, lat2, lon2):
#| bearing_f(...)
#| return d
# TRITIUM-HEIGHT fn=bearing_deg_f high=0.21 mid=0.28 low=0.52
def bearing_deg_f(lat1: float, lon1: float, lat2: float, lon2: float) -> float:
br = bearing_f(lat1, lon1, lat2, lon2)
d = br * 57.29577951308232
while d < 0.0:
d = d + 360.0
while d >= 360.0:
d = d - 360.0
return d
# TRITIUM-PSEUDO fn=interest_radius_f
#| fn interest_radius_f(dx, dy, r):
#| return int(dx * dx + dy * dy <= r * r)
# TRITIUM-HEIGHT fn=interest_radius_f high=0.00 mid=1.00 low=0.00 role=leaf_charset
def interest_radius_f(dx: float, dy: float, r: float) -> int:
return int(dx * dx + dy * dy <= r * r)
# TRITIUM-PSEUDO fn=mmog_interest_filter
#| fn mmog_interest_filter(vals, ys, n, cx, cy, r, out):
#| interest_radius_f(...)
#| float(...)
#| return m
# TRITIUM-HEIGHT fn=mmog_interest_filter high=0.20 mid=0.26 low=0.54 role=algo_mid
def mmog_interest_filter(vals: list[float], ys: list[float], n: int, cx: float, cy: float, r: float, out: list[int]) -> int:
m = 0
i = 0
while i < n:
if interest_radius_f(vals[i] - cx, ys[i] - cy, r) == float(1):
out[m] = i
m = m + 1
i = i + 1
return m
# TRITIUM-PSEUDO fn=mmog_tick_rate_ok
#| fn mmog_tick_rate_ok(last_ms, now_ms, min_dt):
#| return int(now_ms - last_ms >= min_dt)
# TRITIUM-HEIGHT fn=mmog_tick_rate_ok high=0.00 mid=1.00 low=0.00 role=leaf_charset
def mmog_tick_rate_ok(last_ms: int, now_ms: int, min_dt: int) -> int:
return int(now_ms - last_ms >= min_dt)
# TRITIUM-PSEUDO fn=transform3d
#| fn transform3d(x, y, z, r00, r01, r02, r10, r11, r12, r20, r21, r22, tx, ty, tz, out):
#| out[0] = r00 * x + r01 * y + r02 * z + tx
#| out[1] = r10 * x + r11 * y + r12 * z + ty
#| out[2] = r20 * x + r21 * y + r22 * z + tz
#| return 1
# TRITIUM-HEIGHT fn=transform3d high=0.00 mid=0.27 low=0.73 role=algo_mid
def transform3d(x: float, y: float, z: float, r00: float, r01: float, r02: float, r10: float, r11: float, r12: float, r20: float, r21: float, r22: float, tx: float, ty: float, tz: float, out: list[float]) -> int:
out[0] = r00 * x + r01 * y + r02 * z + tx
out[1] = r10 * x + r11 * y + r12 * z + ty
out[2] = r20 * x + r21 * y + r22 * z + tz
return 1
# TRITIUM-PSEUDO fn=project3d
#| fn project3d(x, y, z, f, out):
#| if z == 0.0:
#| out[0] = 0.0
#| out[1] = 0.0
#| return 0
#| out[0] = f * x / z
#| out[1] = f * y / z
#| return 1
# TRITIUM-HEIGHT fn=project3d high=0.00 mid=0.39 low=0.61 role=algo_mid
def project3d(x: float, y: float, z: float, f: float, out: list[float]) -> int:
if z == 0.0:
out[0] = 0.0
out[1] = 0.0
return 0
out[0] = f * x / z
out[1] = f * y / z
return 1
# TRITIUM-PSEUDO fn=viewport
#| fn viewport(u, v, w, h, out):
#| out[0] = (u + 1.0) * 0.5 * w
#| out[1] = (1.0 - v) * 0.5 * h
#| return 1
# TRITIUM-HEIGHT fn=viewport high=0.00 mid=0.25 low=0.75 role=algo_mid
def viewport(u: float, v: float, w: float, h: float, out: list[float]) -> int:
out[0] = (u + 1.0) * 0.5 * w
out[1] = (1.0 - v) * 0.5 * h
return 1