X-Git-Url: http://git.treefish.org/~alex/seamulator.git/blobdiff_plain/31e7aa23c4e95b5e37f33938e9bb47ea82a3f4d9..5baf6f709bb7943c95318e709efa907a0f3f1986:/sea.h diff --git a/sea.h b/sea.h index 48307ee..20f5d63 100644 --- a/sea.h +++ b/sea.h @@ -1,15 +1,44 @@ #pragma once +#include +#include +#include + +#include + #include "seafwd.h" +#include "complexpair.h" #include "watersurfacefwd.h" class Sea { public: Sea(WaterSurfacePtr surface); + ~Sea(); + Sea(const Sea&) = delete; + Sea& operator=(const Sea&) = delete; void update(); private: + static const double PHILLIPS_CONSTANT; + static const double GRAVITATIONAL_CONSTANT; + WaterSurfacePtr m_surface; + double m_windDirection[2]; + double m_windSpeed; + std::random_device m_randomDevice; + std::mt19937 m_randomGenerator; + std::normal_distribution<> m_normalDistribution; + std::vector m_fourierAmplitudes; + fftw_complex *m_fftwIn, *m_fftwOut; + fftw_plan m_fftwPlan; + std::chrono::time_point m_startTime; + + double phillipsSpectrum(double k_x, double k_y) const; + ComplexPair generateFourierAmplitude(double k_x, double k_y); + ComplexPair& fourierAmplitudeAt(int n, int m); + void generateFourierAmplitudes(); + double spatialFrequencyForIndex(int n) const; + double getRuntime() const; };