Torque.h

#pragma once


namespace Core
{
    ref class Model;
    ref class Link;

    typedef array< Robotics::PositionVector^ > PositionVectors;
    typedef System::Collections::Generic::List< Link^ > LinkList;


    // トルク
    public ref class Torque
    {
    // Construction --------------------------------------------------------
    public:
        Torque( Model^ model );


    // Operation -----------------------------------------------------------
    private:
        void CalculateGroundReactionForce();
        LinkList^ GetLinkWithSupportingPhase( LinkList^ links );


    // Attribute ===========================================================
    private:
        Model^ m_model;     ///< モデル

        Robotics::PositionVector^ m_totalCenterOfGravity; ///< 全体の重心[ m ] (ワールド座標系)
        double m_totalMass;                               ///< 全体の質量[ kg ]

        LinkList^ m_supportingLink;             ///< 支持相のリンク
        PositionVectors^ m_groundReactionForce; ///< 床反力[ N ]


    // static
    public:
        literal double Maximum = 1.0;       ///< トルクの最大値[ Nm ]

    private:
        literal double AccelerationOfGravity = 9.80665;   ///< 重力加速度[ m/s2 ]


    // Property ------------------------------------------------------------
    public:
        /// Indexer ( トルク[ Nm ] )
        property double default[ Link^ ]
        {
            double get( Link^ targetLink );
        }
    };
}