// SliderCrankMechanism.h #ifndef SLIDER_CRANK_MECHANISM_H #define SLIDER_CRANK_MECHANISM_H #include "FourBarMechanism/CrankSliderMechanism.h" #include #include #include #include #include "SharedGeometry/SharedGeometry.h" // 解模式枚举 enum class SolutionMode { Auto = 0, Solution1 = 1, Solution2 = 2 }; // 机制参数结构体(扩展版本) struct MechanismParametersExt { double CrankLength; double ConnectingRodLength; double SliderOffset; double InputValue; double AngularVelocity; SolutionMode SolutionMode; std::pair CrankAngleRange1; std::pair CrankAngleRange2; MechanismParametersExt(); }; // 解模式枚举 // 曲柄滑块机构逆解类 class SliderCrankMechanism { private: std::string name; MechanismParametersExt parameters; // 轨迹数据 std::vector trajectoryB; std::vector sliderTrajectory; std::vector trajectoryBAlt; // 辅助方法 double degreesToRadians(double degrees) const; double radiansToDegrees(double radians) const; std::string formatDouble(double value, int precision = 3) const; double clamp(double value, double min, double max) const; // 计算滑块范围 std::pair calculateSliderRange(); public: SliderCrankMechanism(); // 基本属性访问 std::string getName() const; MechanismType getType() const; MechanismParametersExt getParameters() const; void setName(const std::string &newName); void setParameters(const MechanismParametersExt ¶ms); // 设置连杆长度 void setLink(double crankLength, double rodLength, double sliderOffset); // 设置解模式 void setSolutionMode(SolutionMode mode); // 主要计算函数(逆解) MechanismState calculate(double sliderX); // 参数验证 ValidationResult validateParameters(); // 获取输入范围 std::pair getInputRange(); // 获取轨迹点 std::vector getTrajectoryPoints(); std::vector getSliderTrajectory() const; std::vector getAlternativeTrajectory() const; // 清除轨迹 void clearTrajectory(); // 获取状态文本 std::string getStatusText(); }; // 工厂函数 SliderCrankMechanism *createSliderCrankMechanism(); void deleteSliderCrankMechanism(SliderCrankMechanism *mechanism); // 智能指针版本 using SliderCrankMechanismPtr = std::shared_ptr; SliderCrankMechanismPtr createSliderCrankMechanismSmart(); #endif // SLIDER_CRANK_MECHANISM_H