20#ifndef _SINUSOIDAL_FUNCTION_H_
21#define _SINUSOIDAL_FUNCTION_H_
23#include "mbsim/functions/function.h"
24#include "mbsim/utils/utils.h"
30 template<
typename Ret,
typename Arg>
32 using B = fmatvec::Function<Ret(Arg)>;
34 double A, f, phi0, y0;
36 SinusoidalFunction(
double A_=0,
double f_=0,
double phi0_=0,
double y0_=0) : A(A_), f(f_), phi0(phi0_), y0(y0_) { }
37 void setAmplitude(
double A_) { A = A_; }
38 void setFrequency(
double f_) { f = f_; }
39 void setPhase(
double phi0_) { phi0 = phi0_; }
40 void setOffset(
double y0_) { y0 = y0_; }
41 int getArgSize()
const override {
return 1; }
42 std::pair<int, int> getRetSize()
const override {
return std::make_pair(1,1); }
43 Ret operator()(
const Arg &x)
override {
46 typename B::DRetDArg parDer(
const Arg &x)
override {
47 double om = 2.*M_PI*f;
50 typename B::DRetDArg parDerDirDer(
const Arg &xDir,
const Arg &x)
override {
51 double om = 2.*M_PI*f;
54 void initializeUsingXML(xercesc::DOMElement *element)
override {
55 xercesc::DOMElement *e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"amplitude");
56 setAmplitude(MBXMLUtils::E(e)->getText<double>());
57 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"frequency");
58 setFrequency(MBXMLUtils::E(e)->getText<double>());
59 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"phase");
60 if(e) setPhase(MBXMLUtils::E(e)->getText<double>());
61 e=MBXMLUtils::E(element)->getFirstElementChildNamed(MBSIM%
"offset");
62 if(e) setOffset(MBXMLUtils::E(e)->getText<double>());
Definition: function.h:53
Definition: sinusoidal_function.h:28
namespace MBSim
Definition: bilateral_constraint.cc:30