#include "DirectionCosineConstraintIqcJc.h" #include "DirectionCosineIeqcJec.h" #include "EndFrameqc.h" #include "CREATE.h" using namespace MbD; DirectionCosineConstraintIqcJc::DirectionCosineConstraintIqcJc(EndFrmcptr frmi, EndFrmcptr frmj, int axisi, int axisj) : DirectionCosineConstraintIJ(frmi, frmj, axisi, axisj) { } void DirectionCosineConstraintIqcJc::initaAijIeJe() { aAijIeJe = CREATE::With(frmI, frmJ, axisI, axisJ); } void MbD::DirectionCosineConstraintIqcJc::calcPostDynCorrectorIteration() { DirectionCosineConstraintIJ::calcPostDynCorrectorIteration(); auto aAijIeqJe = std::static_pointer_cast(aAijIeJe); pGpEI = aAijIeqJe->pAijIeJepEI; ppGpEIpEI = aAijIeqJe->ppAijIeJepEIpEI; } void MbD::DirectionCosineConstraintIqcJc::useEquationNumbers() { iqEI = std::static_pointer_cast(frmI)->iqE(); } void MbD::DirectionCosineConstraintIqcJc::fillPosICError(FColDsptr col) { Constraint::fillPosICError(col); col->atiplusFullVectortimes(iqEI, pGpEI, lam); } void MbD::DirectionCosineConstraintIqcJc::fillPosICJacob(SpMatDsptr mat) { mat->atijplusFullRow(iG, iqEI, pGpEI); mat->atijplusFullColumn(iqEI, iG, pGpEI->transpose()); mat->atijplusFullMatrixtimes(iqEI, iqEI, ppGpEIpEI, lam); } void MbD::DirectionCosineConstraintIqcJc::fillPosKineJacob(SpMatDsptr mat) { mat->atijplusFullRow(iG, iqEI, pGpEI); } void MbD::DirectionCosineConstraintIqcJc::fillVelICJacob(SpMatDsptr mat) { mat->atijplusFullRow(iG, iqEI, pGpEI); mat->atijplusFullColumn(iqEI, iG, pGpEI->transpose()); } void MbD::DirectionCosineConstraintIqcJc::fillAccICIterError(FColDsptr col) { col->atiplusFullVector(iqEI, pGpEI->times(lam)); auto efrmIqc = std::static_pointer_cast(frmI); auto qEdotI = efrmIqc->qEdot(); auto sum = pGpEI->timesFullColumn(efrmIqc->qEddot()); sum += qEdotI->transposeTimesFullColumn(ppGpEIpEI->timesFullColumn(qEdotI)); col->atiplusNumber(iG, sum); }