cirMoeb.c File Reference


Detailed Description

3D-moebius circles UCV_

=====================================================
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


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

int UCV_IntSectMoebCirs ( Point2 xp1,
Point2 xp2,
ObjGX ox1,
ObjGX ox2 
)

    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

int UCV_CasesApollConfig ( ObjGX oxoT,
Point2 xp,
ObjGX oxiT 
)

    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


Generated on Sat May 30 09:31:54 2009 for gCAD3D by  doxygen 1.5.6