mbsim  4.0.0
MBSim Kernel
MBSim::ContactKinematicsPlatePolynomialFrustum Class Reference

class for contact kinematics between convex frustum and an plate More...

#include <plate_polynomialfrustum.h>

Inheritance diagram for MBSim::ContactKinematicsPlatePolynomialFrustum:
[legend]

Public Member Functions

void assignContours (const std::vector< Contour * > &contour) override
 treats ordering of contours More...
 
void updateg (SingleContact &contact, int i=0) override
 compute contact kinematics for a single contact More...
 
void setGridSizeY (int gridSizeY_)
 
void setGridSizeZ (int gridSizeZ_)
 
- Public Member Functions inherited from MBSim::ContactKinematics
 ContactKinematics (int maxNumContacts_=1)
 constructor
 
 ~ContactKinematics () override=default
 destructor
 
virtual void assignContours (const std::vector< Contour * > &contour_)
 treats ordering of contours More...
 
virtual void calcisSize ()
 
void setisInd (int ind)
 
int getisSize ()
 
virtual void updateInternalStateRef (fmatvec::Vec &curisParent, fmatvec::Vec &nextisParent)
 
virtual void search ()
 
virtual void updateg (std::vector< SingleContact > &contact)
 compute contact kinematics for all contacts More...
 
virtual void updateg (SingleContact &contact, int i=0)
 compute contact kinematics for a single contact More...
 
virtual void updatewb (std::vector< SingleContact > &contact)
 compute contact kinematics on acceleration level for all contacts More...
 
virtual void updatewb (SingleContact &contact, int i=0)
 compute contact kinematics on acceleration level for a single contact More...
 
void assignContours (Contour *contour1, Contour *contour2)
 treats ordering of contours More...
 
int getMaximumNumberOfContacts () const
 
void setGlobalSearch (bool gS_=true)
 
void setInitialGlobalSearch (bool iGS_=true)
 
virtual void setInitialGuess (const fmatvec::MatV &zeta0_)
 set initial guess for root-finding More...
 
void setTolerance (double tol_)
 set tolerance for root-finding
 
void setMaximumNumberOfContacts (int maxNumContacts_)
 set maximum number of contacts
 

Protected Member Functions

void setFrustumOrienationKinematics (const double &x, const double &phi, SingleContact &contact)
 set the values for the contact kinematics for the frustum due to the given x and phi
 
bool cpLocationInPlate (SingleContact &contact)
 check if there is a contact point within the plate between the frustum and the plate More...
 
bool gridContact (SingleContact &contact)
 if the unique contact point cannot be found a grid is walked through and a weighted sum results in the contact point More...
 
bool cornerContact (SingleContact &contact)
 checks if there is a contact point at one of the corner points More...
 
bool edgeContact (SingleContact &contact)
 checks if there is a contact on one edge of the plate More...
 
fmatvec::Vec3 computeContourPointFrustum (const double &x, const fmatvec::Vec3 &n)
 computes the point on the contour of the frustum due to the height-coordinate x and the normal in world coordinates More...
 
fmatvec::Vec3 computeContourPoint (const double &x, const fmatvec::Vec3 &n)
 computes the point on the contour of the frustum due to the height-coordinate x and the normal in world coordinates More...
 
int checkPossibleContactPoint (const double &x, const fmatvec::Vec3 &n)
 check if frustum point identified by coordinate x is possible contact point More...
 
double distance2Plate (const fmatvec::Vec3 &point)
 compute distance between given point and plate More...
 
void updateGrid ()
 updates the grid for the discrete contact point approximation
 

Protected Attributes

int iplate {-1}
 contour index of plate (in cpData)
 
int ifrustum {-1}
 contour index of frustum (in cpData)
 
Plateplate {nullptr}
 pointer to the contour class for the plate
 
PolynomialFrustumfrustum {nullptr}
 pointer to the contour class for the polynomial frustum
 
double signh {1.}
 sign of height-direction
 
int gridSizeY {5}
 grid size in y-direction for the search with grid points
 
int gridSizeZ {5}
 grid size in z-direction for the search with grid points
 
double x1 {-1}
 save last value to use it again as starting value for equation 1
 
double x2 {-1}
 save last value to use it again as starting value for equation 2
 
fmatvec::Vec3 cornerPoints [4]
 array of the four corner points of the plate in the frame of the frustum
 
std::vector< std::vector< fmatvec::Vec3 > > gridPoints
 saves the points for the contact point computation
 
MBSim::projectPointAlongNormalfuncProjectAlongNormal {nullptr}
 function for intersection point
 
MBSim::MultiDimensionalNewtonMethod newtonProjectAlongNormal
 newton method for solving the edge contact
 
MBSim::projectPointAlongNormalJacobianjacobianProjectAlongNormal {nullptr}
 Jacobian for newton method.
 
GlobalResidualCriteriaFunction criteriaProjectAlongNormal
 criteria for newton method
 
MBSim::StandardDampingFunction dampingProjectAlongNormal
 damping function for newton method
 
edgePolyFrustumfuncEdge {nullptr}
 function for intersection point
 
MBSim::MultiDimensionalNewtonMethod newtonEdge
 newton method for solving the edge contact
 
MBSim::NumericalNewtonJacobianFunction jacobianEdge
 Jacobian for newton method.
 
edgePolyFrustumCriteria criteriaEdge
 criteria for newton method
 
MBSim::StandardDampingFunction dampingEdge
 damping function for newton method
 
int ilast {-1}
 index of last edge contact
 
fmatvec::Vec xi
 last position of edge contact
 
fmatvec::Vec2 zeta
 
- Protected Attributes inherited from MBSim::ContactKinematics
double tol {1e-10}
 tolerance for root-finding
 
int maxNumContacts {1}
 maximum number of contacts
 
fmatvec::Vec curis
 
fmatvec::Vec nextis
 
int isInd { 0 }
 
int isSize { 0 }
 
std::vector< Contour * > contour
 
bool gS {false}
 
bool iGS {false}
 

Additional Inherited Members

- Static Public Member Functions inherited from MBSim::ContactKinematics
static std::vector< double > searchPossibleContactPoints (Function< double(double)> *func, double eta, const std::vector< double > &nodes, double tol)
 
static std::vector< double > searchPossibleContactPoints (Function< fmatvec::Vec(fmatvec::Vec)> *func, int i, fmatvec::Vec &zeta, const std::vector< double > &nodes, double tol)
 

Detailed Description

class for contact kinematics between convex frustum and an plate

Author
Kilian Grundl, Tingting Sun
Date
09.10.2012

Member Function Documentation

◆ assignContours()

void MBSim::ContactKinematicsPlatePolynomialFrustum::assignContours ( const std::vector< Contour * > &  contour_)
overridevirtual

treats ordering of contours

Parameters
contourvector

Reimplemented from MBSim::ContactKinematics.

◆ checkPossibleContactPoint()

int MBSim::ContactKinematicsPlatePolynomialFrustum::checkPossibleContactPoint ( const double &  x,
const fmatvec::Vec3 &  n 
)
protected

check if frustum point identified by coordinate x is possible contact point

Parameters
xheight-coordinate of possible contact point
nnormal vector of the plate

◆ computeContourPoint()

Vec3 MBSim::ContactKinematicsPlatePolynomialFrustum::computeContourPoint ( const double &  x,
const fmatvec::Vec3 &  n 
)
protected

computes the point on the contour of the frustum due to the height-coordinate x and the normal in world coordinates

Parameters
xheight coordinate
nnormal of the frustum
Returns
contour point in world coordinates of the contour point on the frustum

◆ computeContourPointFrustum()

Vec3 MBSim::ContactKinematicsPlatePolynomialFrustum::computeContourPointFrustum ( const double &  x,
const fmatvec::Vec3 &  n 
)
protected

computes the point on the contour of the frustum due to the height-coordinate x and the normal in world coordinates

Parameters
xheight coordinate
nnormal of the frustum
Returns
contour point in frustum coordinates of the contour point on the frustum

◆ cornerContact()

bool MBSim::ContactKinematicsPlatePolynomialFrustum::cornerContact ( SingleContact contact)
protected

checks if there is a contact point at one of the corner points

Returns
true (if) or false (if there is no contact at one of the corner points)

◆ cpLocationInPlate()

bool MBSim::ContactKinematicsPlatePolynomialFrustum::cpLocationInPlate ( SingleContact contact)
protected

check if there is a contact point within the plate between the frustum and the plate

Returns
true (if) or false (if there is no contact within the plate)

If there is contact the position and the cpData information is setted right away

◆ distance2Plate()

double MBSim::ContactKinematicsPlatePolynomialFrustum::distance2Plate ( const fmatvec::Vec3 &  point)
protected

compute distance between given point and plate

Parameters
pointGiven point in world coordinates

◆ edgeContact()

bool MBSim::ContactKinematicsPlatePolynomialFrustum::edgeContact ( SingleContact contact)
protected

checks if there is a contact on one edge of the plate

Returns
true (if) or false (if there is no contact at one of the corner points)
Todo:
: unefficient and only finding (one) intersection point --> There should always be two intersection points and then using the middle or something

◆ gridContact()

bool MBSim::ContactKinematicsPlatePolynomialFrustum::gridContact ( SingleContact contact)
protected

if the unique contact point cannot be found a grid is walked through and a weighted sum results in the contact point

Returns
true (if) or false (if there is no contact at one of the corner points)

◆ updateg()

void MBSim::ContactKinematicsPlatePolynomialFrustum::updateg ( SingleContact contact,
int  i = 0 
)
overridevirtual

compute contact kinematics for a single contact

Parameters
conctactsingle contact
iindex of the contact that should be updated

Reimplemented from MBSim::ContactKinematics.


The documentation for this class was generated from the following files: