- Move existing OndselSolver, GNN ML layer, and tooling into GNN/ directory for integration in later phases - Add Create addon scaffold: package.xml, Init.py - Add expression DAG with eval, symbolic diff, simplification - Add parameter table with fixed/free variable tracking - Add quaternion rotation as polynomial Expr trees - Add RigidBody entity (7 DOF: position + unit quaternion) - Add constraint classes: Coincident, DistancePointPoint, Fixed - Add Newton-Raphson solver with symbolic Jacobian + numpy lstsq - Add pre-solve passes: substitution + single-equation - Add DOF counting via Jacobian SVD rank - Add KindredSolver IKCSolver bridge for kcsolve integration - Add 82 unit tests covering all modules Registers as 'kindred' solver via kcsolve.register_solver() when loaded by Create's addon_loader.
60 lines
1.4 KiB
C++
60 lines
1.4 KiB
C++
#include "Integral.h"
|
|
|
|
using namespace MbD;
|
|
|
|
MbD::Integral::Integral(Symsptr arg) : ExpressionX(arg)
|
|
{
|
|
}
|
|
|
|
MbD::Integral::Integral(Symsptr, Symsptr)
|
|
{
|
|
throw SimulationStoppingError("To be implemented.");
|
|
}
|
|
|
|
void MbD::Integral::arguments(Symsptr args)
|
|
{
|
|
auto arguments = args->getTerms();
|
|
xx = arguments->at(0);
|
|
integrand = arguments->at(1);
|
|
expression = integrand->integrateWRT(xx);
|
|
}
|
|
|
|
Symsptr MbD::Integral::expandUntil(Symsptr, std::shared_ptr<std::unordered_set<Symsptr>> set)
|
|
{
|
|
auto expand = expression->expandUntil(expression, set);
|
|
auto answer = std::make_shared<Integral>();
|
|
answer->xx = xx;
|
|
answer->expression = expand;
|
|
answer->integrand = integrand;
|
|
answer->integrationConstant = integrationConstant;
|
|
return answer;
|
|
}
|
|
|
|
Symsptr MbD::Integral::simplifyUntil(Symsptr, std::shared_ptr<std::unordered_set<Symsptr>> set)
|
|
{
|
|
auto simple = expression->simplifyUntil(expression, set);
|
|
auto answer = std::make_shared<Integral>();
|
|
answer->xx = xx;
|
|
answer->expression = simple;
|
|
answer->integrand = integrand;
|
|
answer->integrationConstant = integrationConstant;
|
|
return answer;
|
|
}
|
|
|
|
void MbD::Integral::setIntegrationConstant(double integConstant)
|
|
{
|
|
integrationConstant = sptrConstant(integConstant);
|
|
}
|
|
|
|
std::ostream& MbD::Integral::printOn(std::ostream& s) const
|
|
{
|
|
s << *expression << " + ";
|
|
s << *integrationConstant;
|
|
return s;
|
|
}
|
|
|
|
Symsptr MbD::Integral::copyWith(Symsptr arg)
|
|
{
|
|
return std::make_shared<Integral>(arg);
|
|
}
|