This document describes the API of the hyperbolic geometry macro package. The functions listed here can be used to do hyperbolic geometry. A "*" behind the method name means: currently not (well) tested Operations on coordinates ========================= pair to_euclidean(real radius, real angle) real[] to_hyperbolic(pair p) Basic geometric objects ======================= The following objects are available as datatypes, listed together with their member functions. hyperbolic_point pair get_euclidean() real[] get_hyperbolic() bool is_invalid() void set_invalid() path to_path() hyperbolic_line pair get_first_endpoint() pair get_second_endpoint() bool is_diameter() bool is_invalid() void set_invalid() path to_path() hyperbolic_segment hyperbolic_point get_first_point() hyperbolic_point get_second_point() hyperbolic_line get_line() bool is_invalid() void set_invalid() real length() path to_path() hyperbolic_ray hyperbolic_point get_point() hyperbolic_line get_line() pair get_endpoint() bool is_invalid() void set_invalid() path to_path() hyperbolic_circle bool centerpoint_known() hyperbolic_point get_centerpoint() bool is_invalid() void set_invalid() path to_path() hyperbolic_triangle hyperbolic_point A() hyperbolic_point B() hyperbolic_point C() hyperbolic_segment AB() hyperbolic_segment BC() hyperbolic_segment CA() real a() real b() real c() real alpha() real beta() real gamma() real area() bool is_invalid() void set_invalid() path to_path() hyperbolic_polygon int get_num_corners() hyperbolic_point[] get_corners() hyperbolic_segment[] get_sides() bool is_invalid() void set_invalid() path to_path() Creation of Objects =================== Functions for creating objects hyperbolic_point hyperbolic_point(real radius, real angle) hyperbolic_point hyperbolic_point(pair ep) hyperbolic_line hyperbolic_line(hyperbolic_point A, hyperbolic_point B) hyperbolic_line hyperbolic_line(hyperbolic_point[] P) hyperbolic_segment hyperbolic_segment(hyperbolic_point P, hyperbolic_point Q) hyperbolic_ray hyperbolic_ray(hyperbolic_point P, hyperbolic_point Q) hyperbolic_circle hyperbolic_circle(hyperbolic_point C, hyperbolic_point P) hyperbolic_circle hyperbolic_circle(hyperbolic_point P, hyperbolic_point Q, hyperbolic_point R) hyperbolic_triangle hyperbolic_triangle(hyperbolic_point P, hyperbolic_point Q, hyperbolic_point R) hyperbolic_polygon hyperbolic_polygon(hyperbolic_point[] Points) hyperbolic_polygon hyperbolic_regular_ngon(hyperbolic_point center, hyperbolic_point P, int n) Requesting (boolean) properties =============================== bool is_same_point(hyperbolic_point A, hyperbolic_point B) bool is_same_point(hyperbolic_point A, hyperbolic_point B, hyperbolic_point C) bool distinct(hyperbolic_point A, hyperbolic_point B, hyperbolic_point C) bool right_handed(hyperbolic_point P, hyperbolic_point Q, hyperbolic_point R) bool is_same_line(hyperbolic_line K, hyperbolic_line L) bool is_on_line(hyperbolic_line L, hyperbolic_point P) bool do_intersect(hyperbolic_line G, hyperbolic_line H) bool is_same_segment(hyperbolic_segment S, hyperbolic_segment T) bool is_on_segment(hyperbolic_segment S, hyperbolic_point P) bool is_same_ray(hyperbolic_ray R, hyperbolic_ray S) bool is_on_ray(hyperbolic_ray R, hyperbolic_point P) bool is_on_circle(hyperbolic_circle C, hyperbolic_point P) bool is_inside_circle(hyperbolic_circle C, hyperbolic_point P) Measuring distances and angles ============================== real hyperbolic_distance(hyperbolic_point A, hyperbolic_point B) real angle(hyperbolic_point P, hyperbolic_point Q, hyperbolic_point R) real angle(hyperbolic_line G, hyperbolic_line H) Calculating intersection points =============================== hyperbolic_point intersection(hyperbolic_line K, hyperbolic_line L) hyperbolic_point intersection(hyperbolic_line L, hyperbolic_segment S) hyperbolic_point intersection(hyperbolic_line L, hyperbolic_ray R) hyperbolic_point[] intersection(hyperbolic_line L, hyperbolic_circle C) hyperbolic_point intersection(hyperbolic_segment S, hyperbolic_line L) hyperbolic_point intersection(hyperbolic_segment S, hyperbolic_segment T) hyperbolic_point intersection(hyperbolic_segment S, hyperbolic_ray R) hyperbolic_point[] intersection(hyperbolic_segment S, hyperbolic_circle C) hyperbolic_point intersection(hyperbolic_ray R, hyperbolic_line L) hyperbolic_point intersection(hyperbolic_ray R, hyperbolic_segment S) hyperbolic_point intersection(hyperbolic_ray R, hyperbolic_ray S) hyperbolic_point[] intersection(hyperbolic_ray R, hyperbolic_circle C) hyperbolic_point[] intersection(hyperbolic_circle C, hyperbolic_line L) hyperbolic_point[] intersection(hyperbolic_circle C, hyperbolic_segment S) hyperbolic_point[] intersection(hyperbolic_circle C, hyperbolic_ray R) hyperbolic_point[] intersection(hyperbolic_circle C1, hyperbolic_circle C2) Construction of perpendiculars ============================== hyperbolic_line hyperbolic_normal(hyperbolic_line L, hyperbolic_point P) hyperbolic_line hyperbolic_normal(hyperbolic_segment S, hyperbolic_point P) hyperbolic_line hyperbolic_normal(hyperbolic_ray R, hyperbolic_point P) hyperbolic_point basepoint(hyperbolic_line L, hyperbolic_point P) hyperbolic_point basepoint(hyperbolic_segment S, hyperbolic_point P) hyperbolic_point basepoint(hyperbolic_ray R, hyperbolic_point P) hyperbolic_line common_perpendicular(hyperbolic_line G, hyperbolic_line H) hyperbolic_line common_perpendicular(hyperbolic_segment S, hyperbolic_segment T) hyperbolic_line common_perpendicular(hyperbolic_ray R, hyperbolic_ray S) hyperbolic_line common_perpendicular(hyperbolic_ray R, hyperbolic_segment S) hyperbolic_line common_perpendicular(hyperbolic_segment S, hyperbolic_ray R) hyperbolic_point[] common_basepoints(hyperbolic_line G, hyperbolic_line H) hyperbolic_point[] common_basepoints(hyperbolic_segment S, hyperbolic_segment T) hyperbolic_point[] common_basepoints(hyperbolic_ray R, hyperbolic_ray S) hyperbolic_point[] common_basepoints(hyperbolic_ray R, hyperbolic_segment S) hyperbolic_point[] common_basepoints(hyperbolic_segment S, hyperbolic_ray R) Various other constructions =========================== hyperbolic_point midpoint(hyperbolic_point A, hyperbolic_point B) hyperbolic_line midline(hyperbolic_point A, hyperbolic_point B) hyperbolic_line angle_bisector(hyperbolic_point A, hyperbolic_point B, hyperbolic_point C) hyperbolic_line[] angle_bisector(hyperbolic_line G, hyperbolic_line H) hyperbolic_line tangent(hyperbolic_circle C, hyperbolic_point P) hyperbolic_circle circumcircle(hyperbolic_triangle T) hyperbolic_circle incircle(hyperbolic_triangle T) Mirror Isometries ================= hyperbolic_point mirror(hyperbolic_line M, hyperbolic_point P) hyperbolic_line mirror(hyperbolic_line M, hyperbolic_line L) hyperbolic_segment mirror(hyperbolic_line M, hyperbolic_segment S) hyperbolic_ray mirror(hyperbolic_line M, hyperbolic_ray R) hyperbolic_circle mirror(hyperbolic_line M, hyperbolic_circle C) hyperbolic_triangle mirror(hyperbolic_line M, hyperbolic_triangle T) hyperbolic_polygon mirror(hyperbolic_line M, hyperbolic_polygon P) hyperbolic_point mirror(hyperbolic_segment S, hyperbolic_point P) hyperbolic_line mirror(hyperbolic_segment S, hyperbolic_line L) hyperbolic_segment mirror(hyperbolic_segment S, hyperbolic_segment T) hyperbolic_ray mirror(hyperbolic_segment S, hyperbolic_ray R) hyperbolic_circle mirror(hyperbolic_segment S, hyperbolic_circle C) hyperbolic_triangle mirror(hyperbolic_segment S, hyperbolic_triangle T) hyperbolic_polygon mirror(hyperbolic_segment S, hyperbolic_polygon P) hyperbolic_point mirror(hyperbolic_ray R, hyperbolic_point P) hyperbolic_line mirror(hyperbolic_ray R, hyperbolic_line L) hyperbolic_segment mirror(hyperbolic_ray R, hyperbolic_segment S) hyperbolic_ray mirror(hyperbolic_ray R, hyperbolic_ray S) hyperbolic_circle mirror(hyperbolic_ray R, hyperbolic_circle C) hyperbolic_triangle mirror(hyperbolic_ray R, hyperbolic_triangle T) hyperbolic_polygon mirror(hyperbolic_ray R, hyperbolic_polygon P) hyperbolic_line find_mirror_to_origin(hyperbolic_point P) hyperbolic_line find_mirror(hyperbolic_point P, hyperbolic_point Q) Rotation Isometries =================== hyperbolic_point rotate_around_origin(hyperbolic_point P, real angle) hyperbolic_point rotate(hyperbolic_point center, hyperbolic_point P, real angle) hyperbolic_line rotate_around_origin(hyperbolic_line L, real angle) hyperbolic_line rotate(hyperbolic_point center, hyperbolic_line L, real angle) hyperbolic_segment rotate_around_origin(hyperbolic_segment S, real angle) hyperbolic_segment rotate(hyperbolic_point center, hyperbolic_segment S, real angle) hyperbolic_ray rotate_around_origin(hyperbolic_ray R, real angle) hyperbolic_ray rotate(hyperbolic_point center, hyperbolic_ray R, real angle) hyperbolic_circle rotate_around_origin(hyperbolic_circle C, real angle) hyperbolic_circle rotate(hyperbolic_point center, hyperbolic_circle C, real angle) hyperbolic_triangle rotate(hyperbolic_point center, hyperbolic_triangle T, real angle) hyperbolic_polygon rotate(hyperbolic_point center, hyperbolic_polygon P, real angle) Drawing of objects ================== void dot(picture pic=currentpicture, hyperbolic_point p, pen pe=currentpen) void dot(picture pic=currentpicture, hyperbolic_point[] points, pen pe=currentpen) void dot(picture pic=currentpicture, hyperbolic_circle circle, pen pe=currentpen) void dot(picture pic=currentpicture, hyperbolic_circle[] circles, pen pe=currentpen) void dot(picture pic=currentpicture, hyperbolic_triangle triangle, pen pe=currentpen) void dot(picture pic=currentpicture, hyperbolic_triangle[] triangles, pen pe=currentpen) void dot(picture pic=currentpicture, hyperbolic_polygon polygon, pen pe=currentpen) void dot(picture pic=currentpicture, hyperbolic_polygon[] polygons, pen pe=currentpen) void draw(picture pic=currentpicture, Label L="", hyperbolic_point p, ... void draw(picture pic=currentpicture, Label L="", hyperbolic_point[] points, ... void draw(picture pic=currentpicture, Label L="", hyperbolic_line line, ... void draw(picture pic=currentpicture, Label L="", hyperbolic_line[] lines, ... void draw(picture pic=currentpicture, Label L="", hyperbolic_segment seg, ... void draw(picture pic=currentpicture, Label L="", hyperbolic_segment[] segs, ... void draw(picture pic=currentpicture, Label L="", hyperbolic_ray ray, ... void draw(picture pic=currentpicture, Label L="", hyperbolic_ray[] rays, ... void draw(picture pic=currentpicture, Label L="", hyperbolic_circle circle, ... void draw(picture pic=currentpicture, Label L="", hyperbolic_circle[] circles, ... void draw(picture pic=currentpicture, Label L="", hyperbolic_triangle triangle, ... void draw(picture pic=currentpicture, Label L="", hyperbolic_triangle[] triangles, ... void draw(picture pic=currentpicture, Label L="", hyperbolic_polygon polygon, ... void draw(picture pic=currentpicture, Label L="", hyperbolic_polygon[] polygons, ... void fill(picture pic=currentpicture, hyperbolic_circle circle, pen p=currentpen) void fill(picture pic=currentpicture, hyperbolic_circle[] circles, pen pe=currentpen) void fill(picture pic=currentpicture, hyperbolic_triangle triangle, pen p=currentpen) void fill(picture pic=currentpicture, hyperbolic_triangle[] triangles, pen pe=currentpen) void fill(picture pic=currentpicture, hyperbolic_polygon polygon, pen p=currentpen) void fill(picture pic=currentpicture, hyperbolic_polygon[] polygons, pen pe=currentpen) // EOF