INTERP_KERNEL::EdgeArcCircle Class Reference

Inheritance diagram for INTERP_KERNEL::EdgeArcCircle:
Inheritance graph
[legend]
Collaboration diagram for INTERP_KERNEL::EdgeArcCircle:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 EdgeArcCircle (std::istream &lineInXfig)
 EdgeArcCircle (Node *start, Node *middle, Node *end, bool direction=true)
 EdgeArcCircle (double sX, double sY, double mX, double mY, double eX, double eY)
 EdgeArcCircle (Node *start, Node *end, const double *center, double radius, double angle0, double deltaAngle, bool direction=true)
void changeMiddle (Node *newMiddle)
void dumpInXfigFile (std::ostream &stream, bool direction, int resolution, const Bounds &box) const
void update (Node *m)
double getAreaOfZone () const
double getCurveLength () const
void getBarycenter (double *bary) const
void getBarycenterOfZone (double *bary) const
bool isIn (double characterVal) const
NodebuildRepresentantOfMySelf () const
bool isLower (double val1, double val2) const
double getCharactValue (const Node &node) const
double getDistanceToPoint (const double *pt) const
bool isNodeLyingOn (const double *coordOfNode) const
TypeOfFunction getTypeOfFunc () const
void dynCastFunction (const EdgeLin *&seg, const EdgeArcCircle *&arcSeg) const
const double * getCenter () const
void getCenter (double *center) const
bool doIHaveSameDirectionAs (const Edge &other) const
void applySimilarity (double xBary, double yBary, double dimChar)
double getAngle0 () const
double getRadius () const
double getAngle () const

Static Public Member Functions

static double getAbsoluteAngle (const double *vect, double &normVect)
static double getAbsoluteAngleOfNormalizedVect (double ux, double uy)
static void getArcOfCirclePassingThru (const double *start, const double *middle, const double *end, double *center, double &radius, double &angleInRad, double &angleInRad0)
static double safeSqrt (double val)
static double safeAcos (double cosAngle)
static double safeAsin (double sinAngle)
static bool isIn2Pi (double start, double delta, double angleIn)
static bool isAngleNotIn (double start, double delta, double angleIn)
static double normalizeAngle (double angle)

Protected Member Functions

void updateBounds ()
EdgebuildEdgeLyingOnMe (Node *start, Node *end, bool direction=true) const

Protected Attributes

double _angle
double _angle0
double _radius
double _center [2]

Constructor & Destructor Documentation

EdgeArcCircle::EdgeArcCircle ( std::istream &  lineInXfig  ) 
EdgeArcCircle::EdgeArcCircle ( Node start,
Node middle,
Node end,
bool  direction = true 
)
EdgeArcCircle::EdgeArcCircle ( double  sX,
double  sY,
double  mX,
double  mY,
double  eX,
double  eY 
)
EdgeArcCircle::EdgeArcCircle ( Node start,
Node end,
const double *  center,
double  radius,
double  angle0,
double  deltaAngle,
bool  direction = true 
)
Parameters:
angle0 in ]-Pi;Pi[
deltaAngle in ]-2.*Pi;2.*Pi[

References _center, and updateBounds().


Member Function Documentation

void EdgeArcCircle::changeMiddle ( Node newMiddle  ) 
void EdgeArcCircle::dumpInXfigFile ( std::ostream &  stream,
bool  direction,
int  resolution,
const Bounds &  box 
) const [virtual]
void EdgeArcCircle::update ( Node m  )  [virtual]
double EdgeArcCircle::getAreaOfZone (  )  const [virtual]

This methods computes :

\[ \int_{Current Edge} -ydx \]

Implements INTERP_KERNEL::Edge.

References _angle, _radius, and INTERP_KERNEL::Edge::_start.

double EdgeArcCircle::getCurveLength (  )  const [virtual]

return the length of arc. Value is always > 0. !

Implements INTERP_KERNEL::Edge.

References _angle, and _radius.

void EdgeArcCircle::getBarycenter ( double *  bary  )  const [virtual]

Implements INTERP_KERNEL::Edge.

References _angle, _angle0, _center, and _radius.

void EdgeArcCircle::getBarycenterOfZone ( double *  bary  )  const [virtual]

\[ bary[0]=\int_{Current Edge} -yxdx \]

\[ bary[1]=\int_{Current Edge} -\frac{y^{2}}{2}dx \]

To compute these 2 expressions in this class we have :

\[ x=x_{0}+Radius \cdot cos(\theta) \]

\[ y=y_{0}+Radius \cdot sin(\theta) \]

\[ dx=-Radius \cdot sin(\theta) \cdot d\theta \]

Implements INTERP_KERNEL::Edge.

References _angle, _angle0, _center, and _radius.

bool EdgeArcCircle::isIn ( double  characterVal  )  const [virtual]

Characteristic value used is angle in ]_Pi;Pi[ from axe 0x.

Implements INTERP_KERNEL::Edge.

References _angle, _angle0, and isIn2Pi().

Node * EdgeArcCircle::buildRepresentantOfMySelf (  )  const [virtual]

Retrieves a point that is owning to this, well placed for IN/OUT detection of this. Typically midlle of this is returned.

Implements INTERP_KERNEL::Edge.

References _angle, _angle0, _center, and _radius.

Referenced by dumpInXfigFile().

bool EdgeArcCircle::isLower ( double  val1,
double  val2 
) const [virtual]

Characteristic value used is angle in ]_Pi;Pi[ from axe 0x. 'val1' and 'val2' have been detected previously as owning to this.

Implements INTERP_KERNEL::Edge.

References _angle, _angle0, and _radius.

double EdgeArcCircle::getCharactValue ( const Node node  )  const [virtual]

For Arc circle the caract value is angle with Ox between -Pi and Pi.

Implements INTERP_KERNEL::Edge.

References _center, _radius, and getAbsoluteAngleOfNormalizedVect().

double EdgeArcCircle::getDistanceToPoint ( const double *  pt  )  const [virtual]

retrieves the distance to this : The min distance from pt and any point of this.

Implements INTERP_KERNEL::Edge.

References _angle, _angle0, _center, INTERP_KERNEL::Edge::_end, _radius, INTERP_KERNEL::Edge::_start, INTERP_KERNEL::Node::computeAngle(), INTERP_KERNEL::Node::distanceBtw2Pt(), and isIn2Pi().

bool EdgeArcCircle::isNodeLyingOn ( const double *  coordOfNode  )  const [virtual]

return if node with coords 'coordOfNode' is on this (with precision).

Implements INTERP_KERNEL::Edge.

References _angle, _angle0, _center, _radius, INTERP_KERNEL::Node::areDoubleEquals(), INTERP_KERNEL::Node::computeAngle(), INTERP_KERNEL::Node::distanceBtw2Pt(), and isIn2Pi().

TypeOfFunction INTERP_KERNEL::EdgeArcCircle::getTypeOfFunc (  )  const [virtual]
void INTERP_KERNEL::EdgeArcCircle::dynCastFunction ( const EdgeLin *&  seg,
const EdgeArcCircle *&  arcSeg 
) const [virtual]

Implements INTERP_KERNEL::Edge.

const double* INTERP_KERNEL::EdgeArcCircle::getCenter (  )  const
void INTERP_KERNEL::EdgeArcCircle::getCenter ( double *  center  )  const
bool INTERP_KERNEL::EdgeArcCircle::doIHaveSameDirectionAs ( const Edge other  )  const
void EdgeArcCircle::applySimilarity ( double  xBary,
double  yBary,
double  dimChar 
) [virtual]

apply a similiraty transformation on 'this'

See Node::applySimilarity to see signification of params.

Reimplemented from INTERP_KERNEL::Edge.

References _center, and _radius.

double INTERP_KERNEL::EdgeArcCircle::getAngle0 (  )  const
double INTERP_KERNEL::EdgeArcCircle::getRadius (  )  const
double INTERP_KERNEL::EdgeArcCircle::getAngle (  )  const
double EdgeArcCircle::getAbsoluteAngle ( const double *  vect,
double &  normVect 
) [static]

Given an NON normalized vector 'vect', returns its norm 'normVect' and its angle in ]-Pi,Pi] relative to Ox axe.

References getAbsoluteAngleOfNormalizedVect(), and INTERP_KERNEL::Node::norm().

double EdgeArcCircle::getAbsoluteAngleOfNormalizedVect ( double  ux,
double  uy 
) [static]

Given a normalized vector defined by (ux,uy) returns its angle in ]-Pi;Pi]. So before using this method ux*ux+uy*uy should as much as possible close to 1. This methods is quite time consuming in order to keep as much as possible precision. It is NOT ALWAYS possible to do that only in one call of acos. Sometimes call to asin is necessary due to imperfection of acos near 0. and Pi (cos x ~ 1-x*x/2.)

References safeAcos(), and safeAsin().

Referenced by buildEdgeLyingOnMe(), INTERP_KERNEL::Node::computeAngle(), getAbsoluteAngle(), getArcOfCirclePassingThru(), getCharactValue(), and INTERP_KERNEL::ArcCArcCIntersector::getIntersectionsCharacteristicVal().

void EdgeArcCircle::getArcOfCirclePassingThru ( const double *  start,
const double *  middle,
const double *  end,
double *  center,
double &  radius,
double &  angleInRad,
double &  angleInRad0 
) [static]
static double INTERP_KERNEL::EdgeArcCircle::safeSqrt ( double  val  )  [static]
static double INTERP_KERNEL::EdgeArcCircle::safeAcos ( double  cosAngle  )  [static]
static double INTERP_KERNEL::EdgeArcCircle::safeAsin ( double  sinAngle  )  [static]
bool EdgeArcCircle::isIn2Pi ( double  start,
double  delta,
double  angleIn 
) [static]
Parameters:
start and
angleIn in ]-Pi;Pi] and
delta in ]-2*Pi,2*Pi[

Idem isAngleNotIn except that here 'start' in ]-Pi;Pi[ and delta in ]-2*Pi;2Pi[.

Parameters:
angleIn in ]-Pi;Pi[.

Referenced by getDistanceToPoint(), INTERP_KERNEL::ArcCArcCIntersector::getPlacements(), isIn(), isNodeLyingOn(), and updateBounds().

bool EdgeArcCircle::isAngleNotIn ( double  start,
double  delta,
double  angleIn 
) [static]

'delta' 'start' in ]-Pi;Pi[

Given the arc 'a' defined by 'start' angle and a 'delta' [-Pi;Pi] states for the angle 'angleIn' [-Pi;Pi] if it owns or not 'a'.

Referenced by getArcOfCirclePassingThru().

static double INTERP_KERNEL::EdgeArcCircle::normalizeAngle ( double  angle  )  [static]

for an angle 'angle' in ]-3*Pi;3*Pi[ returns angle in ]-Pi;Pi[

Referenced by INTERP_KERNEL::ArcCArcCIntersector::getIntersectionsCharacteristicVal().

void EdgeArcCircle::updateBounds (  )  [protected]
Edge * EdgeArcCircle::buildEdgeLyingOnMe ( Node start,
Node end,
bool  direction = true 
) const [protected, virtual]

Member Data Documentation

Generated on Tue Jul 27 22:08:51 2010 for Med Memory Users' Guide by  doxygen 1.6.3