cirMoeb.c File Reference
3D-moebius circles UCV_
More...
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "../ut/ut_geo.h"
#include "../ut/ut_ox_base.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 |
Detailed Description
3D-moebius circles UCV_
Function Documentation
| 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
| int UCV_TouchCi2Lns |
( |
ObjGX * |
oxtT, |
|
|
Memspc * |
memSeg, |
|
|
ObjGX * |
oxT | |
|
) |
| | |
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
| int UCV_Touch3Lns |
( |
ObjGX * |
oxtT, |
|
|
Memspc * |
memSeg, |
|
|
ObjGX * |
oxT | |
|
) |
| | |
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
| int UCV_Touch2ConcCiMoebCir |
( |
int * |
nrt, |
|
|
ObjGX * |
oxtT, |
|
|
Memspc * |
memSeg, |
|
|
ObjGX * |
oxT | |
|
) |
| | |
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
| int UCV_LnTouchLnMoebCir |
( |
int * |
nrt, |
|
|
ObjGX * |
oxtT, |
|
|
Memspc * |
memSeg, |
|
|
ObjGX * |
ox1, |
|
|
ObjGX * |
ox2 | |
|
) |
| | |
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
| int UCV_TouchLnLnMoebCir |
( |
int * |
nrt, |
|
|
ObjGX * |
oxtT, |
|
|
Memspc * |
memSeg, |
|
|
ObjGX * |
oxT | |
|
) |
| | |
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
| int UCV_Touch3MoebCirs |
( |
int * |
nrt, |
|
|
ObjGX * |
oxtT, |
|
|
Memspc * |
memSeg, |
|
|
ObjGX * |
oxiT, |
|
|
Memspc * |
workSeg | |
|
) |
| | |
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
| int UCV_CiInvertMoebCir |
( |
ObjGX * |
oxi, |
|
|
Memspc * |
memSeg, |
|
|
ObjGX * |
ox, |
|
|
Point2 * |
ci, |
|
|
double |
ri | |
|
) |
| | |
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
Variable Documentation