1#ifndef CONTACTSURFACEBODY_HPP
2#define CONTACTSURFACEBODY_HPP
54 Cell *closestCell =
nullptr;
57 auto direction =
cell == con->cells.first ? -con->direction : con->direction;
58 double dot = direction.dot(d);
60 const auto &midpoint =
61 cell == con->cells.first ? con->midpoint.first : con->midpoint.second;
62 double l = -midpoint / dot;
63 if (l < closestDist) {
65 closestCell = con->cells.first ==
cell ? con->cells.second : con->cells.first;
69 return std::make_tuple(closestCell, closestDist);
74 double volumeLoss = 0;
79 cell == con->cells.first ? con->midpoint.first : con->midpoint.second;
81 volumeLoss += (M_PI * h / 6.0) * (3.0 * con->sqradius + h * h);
121 Integrator::updatePosition(*
this, dt);
void updateDynamicRadius(double dt)
void setStiffness(double k)
double getMomentOfInertia() const
std::vector< ContactSurface< Cell > * > cellConnections
void setDynamicRadius(double r)
bool volumeConservationEnabled
double dynamicRadius
radiius of the cell when at rest
double getPreciseMembraneDistance(const Vec &d) const
double getRestArea() const
ContactSurfaceBody(Cell *c, Vector3D pos=Vector3D::zero())
double getBoundingBoxRadius() const
double getRadius(void) const
double getVolumeVariation() const
static constexpr double MAX_DYN_RADIUS_RATIO
double getPressure() const
void setIncompressibility(double i)
void updatePositionsAndOrientations(double dt)
uses
void setVolumeConservationEnabled(bool v)
std::tuple< Cell *, double > getConnectedCellAndMembraneDistance(const Vec &d) const
void computeCurrentAreaAndVolume()
void updateInternals(double dt)
void setRestVolume(double v)
void moveTo(Vector3D newpos)
Cell * getConnectedCell(const Vec &d) const
double getRestMomentOfInertia() const
double getDynamicRadius() const
void setPosition(const Vec &p)
general purpose 3D vector/point class.
static Vector3D zero()
constructs a zero vector
Represents a cell in the simulation.
A simple vector class template.
this file contains various miscellanious utility functions & helpers *