===================================================== Liste_Funktionen_Beginn: UCV_CasesApollConfig Cases <-- Apollonian configuration UCV_FilterTouch3MCirs Filter <-- touching Moebius circles UCV_IntSectMoebCirs Intersection <-- two Moebius circles UCV_CiInvertMoebCir Invert at circle <-- Moebius circle UCV_LnTouchLnMoebCir Touching lines <-- 1 line, 1 M-cir UCV_OffSurCrv Offset surface curve <-- curve UCV_TouchCi2Lns Touching circles <-- 1 circle & 2 unparallel lines UCV_TouchLnLnMoebCir Touching M-cirs <-- 2 parallel lines, 1 M-cir UCV_Touch2ConcCiMoebCir Touching M-cirs <-- 2 concentric M-cirs, 1 M-cir UCV_Touch3Lns Touching circles <-- 3 pairwise unparallel lines UCV_Touch3MCirsCase1 Touching Moebius circles <-- 3 M-circles - case 1 UCV_Touch3MCirsCase2 Touching Moebius circles <-- 3 M-circles - case 2 UCV_Touch3MCirsCase3 Touching Moebius circles <-- 3 M-circles - case 3 UCV_Touch3MCirsCase4 Touching Moebius circles <-- 3 M-circles - case 4 UCV_Touch3MoebCirs Touching Moebius circles <-- three Moebius circles Liste_Funktionen_Ende: =====================================================
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "../ut/ut_geo.h"
#include "../gr/ut_UI.h"
#include "../ut/ut_math.h"
#include "../ut/ut_TX.h"
#include "../ut/utemp.h"
Functions | |
int | UCV_Touch3MCirsCase4 (ObjGX *oxtT, Memspc *memSeg, ObjGX *oxT, Point2 *xp, Memspc *workSeg) |
int | UCV_Touch3MCirsCase3 (ObjGX *oxtT, Memspc *memSeg, ObjGX *oxT, Point2 *tp, Memspc *workSeg) |
int | UCV_Touch3MCirsCase2 (int *nrt, ObjGX *oxtT, Memspc *memSeg, ObjGX *oxT, Memspc *workSeg) |
int | UCV_Touch3MCirsCase1 (int *nrt, ObjGX *oxtT, Memspc *memSeg, ObjGX *oxT, Point2 *tp, Memspc *workSeg) |
int | UCV_TouchCi2Lns (ObjGX *oxtT, Memspc *memSeg, ObjGX *oxT) |
int | UCV_Touch3Lns (ObjGX *oxtT, Memspc *memSeg, ObjGX *oxT) |
int | UCV_Touch2ConcCiMoebCir (int *nrt, ObjGX *oxtT, Memspc *memSeg, ObjGX *oxT) |
int | UCV_LnTouchLnMoebCir (int *nrt, ObjGX *oxtT, Memspc *memSeg, ObjGX *ox1, ObjGX *ox2) |
int | UCV_TouchLnLnMoebCir (int *nrt, ObjGX *oxtT, Memspc *memSeg, ObjGX *oxT) |
int | UCV_Touch3MoebCirs (int *nrt, ObjGX *oxtT, Memspc *memSeg, ObjGX *oxiT, Memspc *workSeg) |
int | UCV_CiInvertMoebCir (ObjGX *oxi, Memspc *memSeg, ObjGX *ox, Point2 *ci, double ri) |
int | UCV_IntSectMoebCirs (Point2 *xp1, Point2 *xp2, ObjGX *ox1, ObjGX *ox2) |
int | UCV_CasesApollConfig (ObjGX *oxoT, Point2 *xp, ObjGX *oxiT) |
Variables | |
const Point2 | UT2D_PT_INFTY |
int UCV_Touch3MCirsCase4 | ( | ObjGX * | oxtT, | |
Memspc * | memSeg, | |||
ObjGX * | oxT, | |||
Point2 * | xp, | |||
Memspc * | workSeg | |||
) |
UCV_Touch3MCirsCase4 Touching Moebius circles <-- 3 M-circles - case 4 Compute all 8 Moebius circles except points which touch three given Moebius circles in case 4 - Apollonian configuration: any two elements are intersecting in two different points & all three elements have no common point. A Moebius circle is a circle, line or finite point in (xy-plane & UT2D_PT_INFTY). IN: ObjGX *oxT ... 3 Moebius circles (in case 4 - Apoll config) ([0]...circle if xp == UT2D_PT_INFTY, element not incident with xp if xp == finite) Point2 *xp ... one of the intersection points (=UT2D_PT_INFTY if existing) Memspc *workSeg ... workspace OUT: ObjGX *oxtT ... touching Moebius circles (8) Memspc *memSeg ... space for oxtT[i].data, i=0,1,... and workspace Returncodes: 0 = OK -1 = internal error
int UCV_Touch3MCirsCase3 | ( | ObjGX * | oxtT, | |
Memspc * | memSeg, | |||
ObjGX * | oxT, | |||
Point2 * | tp, | |||
Memspc * | workSeg | |||
) |
UCV_Touch3MCirsCase3 Touching Moebius circles <-- 3 M-circles - case 3 Compute all 4 Moebius circles except points which touch three given Moebius circles in case 3 - Apollonian configuration: any two elements are intersecting in two different points & all three elements have 1 common point. A Moebius circle is a circle, line or finite point in (xy-plane & UT2D_PT_INFTY). IN: ObjGX *oxT ... 3 Moebius circles (in case 3 - Apoll config) Point2 *tp ... common point of all 3 elements Memspc *workSeg ... workspace OUT: ObjGX *oxtT ... touching Moebius circles (4) Memspc *memSeg ... space for oxtT[i].data, i=0,1,... and workspace Returncodes: 0 = OK -1 = internal error
int UCV_Touch3MCirsCase2 | ( | int * | nrt, | |
ObjGX * | oxtT, | |||
Memspc * | memSeg, | |||
ObjGX * | oxT, | |||
Memspc * | workSeg | |||
) |
UCV_Touch3MCirsCase2 Touching Moebius circles <-- 3 M-circles - case 2 Compute all Moebius circles except points (at most 8) which touch three given Moebius circles in case 2 - Apollonian configuration: there is no pair of touching elements & there are two elements without common point. A Moebius circle is a circle, line or finite point in (xy-plane & UT2D_PT_INFTY). IN: ObjGX *oxT ... 3 Moebius circles (in case 2 - Apoll config) ([0],[1]...2 elements without common point) Memspc *workSeg ... workspace OUT: int *nrt ... number of touching Moebius circles (<=8) ObjGX *oxtT ... touching Moebius circles (8) Memspc *memSeg ... space for oxtT[i].data, i=0,1,... and workspace Returncodes: 0 = OK -1 = internal error -2 = input error -3 = out of space
int UCV_Touch3MCirsCase1 | ( | int * | nrt, | |
ObjGX * | oxtT, | |||
Memspc * | memSeg, | |||
ObjGX * | oxT, | |||
Point2 * | tp, | |||
Memspc * | workSeg | |||
) |
UCV_Touch3MCirsCase1 Touching Moebius circles <-- 3 M-circles - case 1 Compute all Moebius circles except points (at most 6) which touch three given Moebius circles in case 1 - Apollonian configuration: there are two elements touching each other. A Moebius circle is a circle, line or finite point in (xy-plane & UT2D_PT_INFTY). IN: ObjGX *oxT ... 3 Moebius circles (in case 1 - Apoll config) Point2 *tp ... touch point of M-cirs [0],[1] Memspc *workSeg ... workspace OUT: int *nrt ... number of touching Moebius circles (<=6) ObjGX *oxtT ... touching Moebius circles (6) Memspc *memSeg ... space for oxtT[i].data, i=0,1,... and workspace Returncodes: 0 = OK -1 = internal error -2 = out of space
UCV_TouchCi2Lns Touching circles <-- 1 circle & 2 unparallel lines Compute all eight circles which touch a circle and two unparallel lines. It is supposed that any two elements are intersecting in two different points (meaning for the lines not to be parallel) and that all three elements have no common point. IN: ObjGX *oxT ... circle ([0]) and two lines OUT: ObjGX *oxtT ... touching circles (8) Memspc *memSeg ... space for oxtT[i].data, i=0,1,... Returncodes: 0 = OK -1 = internal error -2 = input error -3 = out of space
UCV_Touch3Lns Touching circles <-- 3 pairwise unparallel lines Compute all four circles which touch three pairwise unparallel lines. IN: ObjGX *oxT ... 3 pairwise unparallel lines OUT: ObjGX *oxtT ... touching circles (4) Memspc *memSeg ... space for oxtT[i].data, i=0,1,... Returncodes: 0 = OK -1 = internal error -2 = input error -3 = out of space
UCV_Touch2ConcCiMoebCir Touching M-cirs <-- 2 concentric M-cirs, 1 M-cir Compute all Moebius circles except points (at most 8) which touch two concentric and one Moebius circle. A Moebius circle is a circle, line or finite point in (xy-plane & UT2D_PT_INFTY). All three elements are supposed to be different! One of the two concentric Moebius circles might be a point (=circlecenter). IN: ObjGX *oxT ... 2 concentric M-cirs ([0],[1]) and 1 M-cir [2] OUT: int *nrt ... number of touching Moebius circles ObjGX *oxtT ... touching Moebius circles (8) Memspc *memSeg ... space for oxtT[i].data, i=0,1,... Returncodes: 0 = OK -1 = internal error -2 = input error -3 = out of space
UCV_LnTouchLnMoebCir Touching lines <-- 1 line, 1 M-cir Compute the lines (at most 2) which touch a line and a Moebius circle. A Moebius circle is a circle, line or finite point in (xy-plane & UT2D_PT_INFTY). IN: ObjGX *ox1 ... line ObjGX *ox2 ... Moebius circle OUT: int *nrt ... number of touching lines ObjGX *oxtT ... touching lines (2) Memspc *memSeg ... space for oxtT[i].data, i=0,1,... Returncodes: 0 = OK -1 = input error -2 = out of space
UCV_TouchLnLnMoebCir Touching M-cirs <-- 2 parallel lines, 1 M-cir Compute all Moebius circles except points (at most 6) which touch two parallel lines and one Moebius circle. A Moebius circle is a circle, line or finite point in (xy-plane & UT2D_PT_INFTY). All three elements are supposed to be different! IN: ObjGX *oxT ... 2 lines ([0],[1]) and 1 Moebius circle [2] OUT: int *nrt ... number of touching Moebius circles ObjGX *oxtT ... touching Moebius circles (6) Memspc *memSeg ... space for oxtT[i].data, i=0,1,... Returncodes: 0 = OK -1 = internal error -2 = input error -3 = out of space
UCV_Touch3MoebCirs Touching Moebius circles <-- three Moebius circles Compute all Moebius circles except points (at most 8) which touch three different Moebius circles. A Moebius circle is a circle, line or finite point in (xy-plane & UT2D_PT_INFTY). In case of three touching Moebius circles no solution is computed (infinite number of possibilities). There might be solutions touching one of the input elements at infinity! IN: ObjGX *oxiT ... 3 Moebius circles Memspc *workSeg ... workspace OUT: int *nrt ... number of touching Moebius circles ObjGX *oxtT ... touching Moebius circles (8) Memspc *memSeg ... space for oxtT[i].data, i=0,1,... and workspace Returncodes: 0 = OK -1 = internal error
UCV_CiInvertMoebCir Invert at circle <-- Moebius circle Invert (=mirror) a Moebius circle at a circle. A Moebius circle is a circle, line or finite point in (xy-plane & UT2D_PT_INFTY). The function may be called with same parameter for ox and oxi. IN: ObjGX *ox ... Moebius circle Point2 *ci ... center of inversion (!=UT2D_PT_INFTY) double ri ... radius of inversion OUT: ObjGX *oxi ... inverse Moebius circle Memspc *memSeg ... space for oxi->data Returncodes: 1 = oxi is NO Moebius circle but INFINITE point 0 = OK -1 = input error -2 = out of space
UCV_IntSectMoebCirs Intersection <-- two Moebius circles Intersection of two different Moebius circles. A Moebius circle is a circle, line or finite point in (xy-plane & UT2D_PT_INFTY). An intersection point may be UT2D_PT_INFTY. IN: ObjGX *ox1 ... Moebius circle 1 ObjGX *ox2 ... Moebius circle 2 OUT: Point2 *xp1 ... intersection point 1 Point2 *xp2 ... intersection point 2 Returncodes: 0 = 0 intersection points 1 = 1 intersection point (*xp1 = *xp2) 2 = 2 intersection points (different!) -1 = input error
UCV_CasesApollConfig Cases <-- Apollonian configuration IN: ObjGX *oxiT ... 3 Moebius circles OUT: ObjGX *oxoT ... ordered elements of oxiT (3); case 1: touching elements at indices 0,1; case 2: elements without common point at indices 0,1; case 4: at index 0: circle if xp == UT2D_PT_INFTY, element not incident with xp if xp == finite. Point2 *xp ... case 1: touching point of elements 0,1; case 3: common point of all three elements; case 4: one of the intersection points (=UT2D_PT_INFTY if existing); Returncodes: 1 = case 1 2 = case 2 3 = case 3 4 = case 4 5 = case 5 -1 = internal error
const Point2 UT2D_PT_INFTY |