- 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.
46 lines
1.3 KiB
C++
46 lines
1.3 KiB
C++
/***************************************************************************
|
|
* Copyright (c) 2023 Ondsel, Inc. *
|
|
* *
|
|
* This file is part of OndselSolver. *
|
|
* *
|
|
* See LICENSE file for details about copyright. *
|
|
***************************************************************************/
|
|
|
|
#include "ExpressionX.h"
|
|
#include "Constant.h"
|
|
|
|
using namespace MbD;
|
|
|
|
MbD::ExpressionX::ExpressionX(Symsptr arg) : FunctionX(arg)
|
|
{
|
|
}
|
|
|
|
void MbD::ExpressionX::xexpression(Symsptr arg, Symsptr func)
|
|
{
|
|
//"
|
|
//Future modification :
|
|
//Check that func is a function of arg.
|
|
//No need for self to be dependent of arg since self is dependent of func which is indirectly
|
|
//dependent of of arg.
|
|
//"
|
|
|
|
xx = arg;
|
|
expression = func;
|
|
}
|
|
|
|
Symsptr MbD::ExpressionX::differentiateWRTx()
|
|
{
|
|
return expression->differentiateWRT(xx);
|
|
}
|
|
|
|
Symsptr MbD::ExpressionX::differentiateWRT(Symsptr var)
|
|
{
|
|
if (this == var.get()) return sptrConstant(1.0);
|
|
return expression->differentiateWRT(var);
|
|
}
|
|
|
|
double MbD::ExpressionX::getValue()
|
|
{
|
|
return expression->getValue();
|
|
}
|