Print
Category: Zeus Framework
Hits: 3845

Index of Tangential Circles and Arcs


1. Introduction

The ZeusMath Library contains a complete implementation to get tangetial circles and arcs between different elements. A tangential circle or arc can be established between


2. Tangential Circles on Lines

There exist three sets of solutions:

2.1 Implementation

The implementation is available in the sub package zeusmath/Geometry using the classes TCircle2D,TStraightLine2D, TArc2D and TLineSegment2D.


#include &ltzeusmath/Geometry/Circle2D.h&gt
#include &ltzeusmath/Geometry/StraightLine2D.h&gt¨
...

  TStraightLine2D Sl1(TVector2D(0, 0), TVector2D(1, 0), true);
  TStraightLine2D Sl2(TVector2D(0, 2), TVector2D(1, 0), true);

  TCircle2D Circle1;
  TCircle2D Circle2;
  TCircle2D Circle3;
  TCircle2D Circle4;
  if(TCircle2D::calcCirclesTangentTo2StraightLines(Sl3,     //First line
                                                   Sl4,     //Second line
                                                   23.4,    //Tangential radius
                                                   Circle1, //4 solutions
                                                   Circle2, 
                                                   Circle3, 
                                                   Circle4) == RET_NOERROR)
  {
    ...
  }

The line segments are lines which are limited between two vectors, start and end points. This constrains the possible solutions of tangential circles. Their touch points must be inside the start and end point.


#include &ltzeusmath/Geometry/Circle2D.h&gt
#include &ltzeusmath/Geometry/LineSegment2D.h&gt
...

  TLineSegment2D LineSegment1(TVector2D(2, 1), TVector2D(0, 3));
  TLineSegment2D LineSegment2(TVector2D(3, 1), TVector2D(4, 4));
  Float R = 1.5;

  TValueTypeList<TCircle2D, ICircle2D> lstTangentCircles;
  if (TCircle2D::calcCirclesTangentTo2LineSegments(LineSegment1, 
                                                   LineSegment2, 
                                                   1.5, 
                                                   lstTangentCircles))
  {
    ...
  }

3. Tangential Circles on Line and Circle

There exist eight sets of solutions:

3.1 Implementation

 


#include &ltzeusmath/Geometry/Circle2D.h&gt
#include &ltzeusmath/Geometry/StraightLine2D.h&gt
#include &ltzeusbase/System/ValueTypeList.hpp&gt
...

  TStraightLine2D Sl(TVector2D(3, 0), TVector2D(-3, 2), true);
  TValueTypeList<TCircle2D, ICircle2D> lstTangentCircles;
  TCircle2D Circle1(TVector2D(2, 2.5), 4);
  if (TCircle2D::calcCirclesTangentToStraightLineAndCircle(Sl, 
                                                           Circle1, 
                                                           0.75, 
                                                           lstTangentCircles))
  {
    ...
    //List contains all solutions
  }

The possible solutions of tangential circles are constraint by the line segment and the arc, which both starts at the starting point and end at the end point.


#include &ltzeusmath/Geometry/Circle2D.h&gt
#include &ltzeusmath/Geometry/LineSegment2D.h&gt
#include &ltzeusmath/Geometry/Arc2D.h&gt
#include &ltzeusbase/System/ValueTypeList.hpp&gt
...

  TLineSegment2D Ls(TVector2D(1, 2), TVector2D(4, 2));
  TArc2D Arc(TVector2D(5, 2), 
             1, 
             TAngle(180, IAngle::etDegrees), 
             TAngle(270, IAngle::etDegrees), true);

  TValueTypeList<TCircle2D, ICircle2D> lstTangentCircles;
  If(TCircle2D::calcCirclesTangentToLineSegmentAndArc(Ls, 
                                                      Arc, 
                                                      2, 
                                                      lstTangentCircles))
  {
    ...
    //List contains all solutions
  }

4. Tangential Circles on Circles

There exist ten sets of solutions:

4.1 Implementation

 


#include &ltzeusmath/Geometry/Circle2D.h&gt
#include &ltzeusbase/System/ValueTypeList.hpp&gt
...

  TCircle2D A(TVector2D(-2.5, 5), 4);
  TCircle2D B(TVector2D(6, 2),    6.5);

  TValueTypeList<TCircle2D, ICircle2D> lstTangentCircles;
  if(TCircle2D::calcCirclesTangentTo2Circles(A, 
                                             B, 
                                             0.5, 
                                             lstTangentCircles))
  {
    ...
    //List contains all solutions
  }

#include &ltzeusmath/Geometry/Circle2D.h&gt
#include &ltzeusmath/Geometry/Arc2D.h&gt
#include &ltzeusbase/System/ValueTypeList.hpp&gt
...

  TArc2D Arc1(TVector2D(0, 1), 
              1, 
              TAngle( 90, IAngle::etDegrees), 
              TAngle(  0, IAngle::etDegrees), 
              false);
  TArc2D Arc2(TVector2D(3, 1), 
              2, 
              TAngle(180, IAngle::etDegrees), 
              TAngle(270, IAngle::etDegrees), 
              true);
  Float R = 1.5;

  TValueTypeList<TCircle2D, ICircle2D> lstTangentCircles;

  if(TCircle2D::calcCirclesTangentTo2Arcs(Arc1, 
                                          Arc2, 
                                          R, 
                                          lstTangentCircles))
  {
    ...
    //List contains all solutions
  }