#include "Sinewave.h" #include #include #include "Assembly.h" Sinewave::Sinewave() : m_start_time {clock::now()}, m_amplitude {1.0}, m_frequency {1.0}, m_phase {0.0} { } void Sinewave::apply(AssemblyContext ctx) { ctx.bind("/set_amplitude", [&](double amplitude) { set_amplitude(amplitude); }); ctx.bind("/set_frequency", [&](double frequency) { set_frequency(frequency); }); ctx.bind("/set_phase", [&](double phase) { set_phase(phase); }); ctx.bind("/get_amplitude", [&]() -> double { return get_amplitude(); }); ctx.bind("/get_frequency", [&]() -> double { return get_frequency(); }); ctx.bind("/get_phase", [&]() -> double { return get_phase(); }); ctx.bind("/get_point", [&]() -> double { return get_point(); }); } void Sinewave::set_amplitude(double amplitude) { m_amplitude = amplitude; } void Sinewave::set_frequency(double frequency) { m_frequency = frequency; } void Sinewave::set_phase(double phase) { m_phase = phase; } double Sinewave::get_amplitude() const { return m_amplitude; } double Sinewave::get_frequency() const { return m_frequency; } double Sinewave::get_phase() const { return m_phase; } double Sinewave::get_point() const { const std::chrono::duration time = clock::now() - m_start_time; return m_amplitude * sin(2 * M_PI * m_frequency * time.count() + m_phase); }