Trax3 3.1.0
trax track library
Loading...
Searching...
No Matches
trax::RotatorChain Struct Referenceabstract

A series of Rotator curves that continue each other. More...

#include <C:/Trend/Development/Trax3/Code/trax/Curve.h>

Inheritance diagram for trax::RotatorChain:

Public Types

using SegmentValueType = std::tuple<Angle,Angle,Length>
using Data = std::vector<SegmentValueType>
 Data defining the curve.
Public Types inherited from trax::Curve
enum class  CurveType {
  none = 0 , Line , Arc , Helix ,
  LineP , ArcP , HelixP , Clothoid ,
  Cubic , Spline , Rotator , RotatorWithOffset ,
  RotatorChain , PolygonalChain , SampledCurve , Parallel ,
  EEPCurve , EEPResidual , EEPAlternative , Unknown ,
  UserDefined
}
 Curve type identification values. More...

Public Member Functions

virtual const DataGetData () const noexcept=0
 Retrieves the data to construct this curve type. A roundtrip is guaranteed to be invariant.
Creation
virtual common::Interval< LengthCreate (const spat::Vector< Length > &advance)=0
 Create a RotatorChain that starts and ends with the same tangent and advances by the given vector.
virtual common::Interval< LengthCreate (const Data &data)=0
 Create the curve from data set for which it is guaranteed, that no calculational drift will happen e.g. in write/read cycles.
Public Member Functions inherited from trax::Curve
virtual const char * TypeName () const noexcept=0
virtual CurveType GetCurveType () const noexcept=0
virtual bool IsValid () const noexcept=0
virtual AnglePerLength Curvature (Length s) const =0
virtual AnglePerLength Torsion (Length s) const =0
virtual bool IsFlat () const noexcept=0
virtual void Transition (Length s, spat::Position< Length > &pos) const =0
 Copies the 3D Position at the specified location to pos.
virtual void Transition (Length s, spat::Vector< One > &tan) const =0
 Copies the 3D tangential vector at the specified location to tan.
virtual void Transition (Length s, spat::VectorBundle< Length, One > &bundle) const =0
 Copies the 3D Position and tangential vector at the specified location to bundle.
virtual void Transition (Length s, spat::VectorBundle2< Length, One > &bundle) const =0
 Copies the 3D Position and tangential and normal vectors at the specified location to bundle.
virtual void Transition (Length s, spat::Frame< Length, One > &frame) const =0
 Copies the 3D TBN-Frame at the specified location to frame.
virtual std::vector< LengthZeroSet () const =0
 Returns a list of parameters at which the normal vector flips from one side to the other.
virtual common::Interval< LengthRange () const =0
virtual spat::Vector< OneLocalUp () const =0
 Gives the Curve's idiosyncratic up direction. Some curves maintain some idea about where they have their upside, either because of their form (e.g Helix) or because it is extra defined (e.g. for Line). Some curves maintain no such notion (e.g. many Cubics).
virtual spat::Frame< Length, OneGetCurveLocalTransformation () const =0
virtual std::unique_ptr< Curve > Clone () const =0
 make an exact copy of this curve.
virtual bool Mirror (const spat::VectorBundle< Length, One > &mirrorPlane)=0
 Make a Curve with mirrored geometry (but of course one thet returns right handed frames).
virtual bool Equals (const Curve &toCurve, common::Interval< Length > range, Length epsilon_length=epsilon__length, Angle epsilon_angle=epsilon__angle) const =0
 Comparison.
 Curve (Curve &&)=delete
Curve & operator= (const Curve &)=delete
Curve & operator= (Curve &&)=delete

Static Public Member Functions

static dclspc std::unique_ptr< RotatorChainMake () noexcept
 Makes a RotatorChain object.

Additional Inherited Members

Protected Member Functions inherited from trax::Curve
 Curve (const Curve &)=default

Detailed Description

A series of Rotator curves that continue each other.

The Rotator raises the question, wether there could be a simple additive behaviour of those angular rotations. Unfortunately this is not given if Rotator curves are stiched together with their tracks. The reason for this is that in general the rotational axes would not be the same. But it is possible to do such addition based on the same frame of reference, which is what RotatorChain does:

Member Typedef Documentation

◆ Data

using trax::RotatorChain::Data = std::vector<SegmentValueType>

Data defining the curve.

The triples are the total anle a, the total angle b and the length of Rotator segments of the curve.

Member Function Documentation

◆ Create() [1/2]

virtual common::Interval< Length > trax::RotatorChain::Create ( const Data & data)
pure virtual

Create the curve from data set for which it is guaranteed, that no calculational drift will happen e.g. in write/read cycles.

Exceptions
std::invalid_argumentif the curve can not created from the input values.

◆ Create() [2/2]

virtual common::Interval< Length > trax::RotatorChain::Create ( const spat::Vector< Length > & advance)
pure virtual

Create a RotatorChain that starts and ends with the same tangent and advances by the given vector.

Only the advance.dz is strictly respected, the other two might suffer aberrivations.

Parameters
advanceThe vector to advance the curve by (end - start) == advance.

The documentation for this struct was generated from the following file:
  • C:/Trend/Development/Trax3/Code/trax/Curve.h