Serializable::inspect
to show more useful information
serialization :: serialization_core
Abstract services to serialize Nit objects to different formatscore :: union_find
union–find algorithm using an efficient disjoint-set data structureaccept_scroll_and_zoom
gamnit :: camera_control_android
Two fingers camera manipulation, pinch to zoom and slide to scrollgamnit :: camera_control_linux
Mouse wheel and middle mouse button to control cameraEulerCamera
and App::frame_core_draw
to get a stereoscopic view
# Angle related service using `Float` to represent an angle in radians
module angles
import points_and_lines
redef class Point[N]
# Arctangent function using the difference between `self` and `other` as trigonometric ratio
#
# Behave similarly to the toplevel `atan2` as it returns the angle in the appropriate quadrant.
#
# ~~~
# var p0 = new Point[Float](0.0, 0.0)
# var p1 = new Point[Float](1.0, 1.0)
# assert p0.atan2(p1).is_approx(0.25*pi, 0.0001)
# ~~~
fun atan2(other: Point[N]): Float
do
var dx = other.x.to_f - x.to_f
var dy = other.y.to_f - y.to_f
return sys.atan2(dy.to_f, dx.to_f)
end
end
redef universal Float
# Normalize the `self` angle in radians to be within `[-pi .. pi[`
#
# ~~~
# assert (1.5*pi).angle_normalize.is_approx(-0.5*pi, 0.0001)
# assert 8.0.angle_normalize.is_approx(1.7168, 0.0001)
# assert (-1.0).angle_normalize == -1.0
# ~~~
fun angle_normalize: Float
do
var s = self
while s < -pi do s += 2.0*pi
while s >= pi do s -= 2.0*pi
return s
end
# Linear interpolation of between the angles `a` and `b`, in radians
#
# The result is normalized with `angle_normalize`.
#
# ~~~
# assert 0.5.angle_lerp(0.0, pi).is_approx(0.5*pi, 0.0001)
# assert 8.5.angle_lerp(0.0, pi).is_approx(0.5*pi, 0.0001)
# assert 7.5.angle_lerp(0.0, pi).is_approx(-0.5*pi, 0.0001)
# assert 0.5.angle_lerp(0.2, 2.0*pi-0.1).is_approx(0.05, 0.0001)
# ~~~
fun angle_lerp(a, b: Float): Float
do
var d = b - a
while d > pi do d -= 2.0*pi
while d < -pi do d += 2.0*pi
return (a + d*self).angle_normalize
end
end
lib/geometry/angles.nit:15,1--71,3