]> git.treefish.org Git - seamulator.git/blob - sea.h
6e24ac3bd3a5f859198ab6329015601c7bdb3d73
[seamulator.git] / sea.h
1 #pragma once
2
3 #include <complex>
4 #include <random>
5
6 #include "seafwd.h"
7
8 #include "complexpair.h"
9 #include "watersurfacefwd.h"
10
11 class Sea
12 {
13  public:
14   Sea(WaterSurfacePtr surface);
15   void update();
16
17  private:
18   static const double PHILLIPS_CONSTANT;
19   static const double GRAVITATIONAL_CONSTANT;
20
21   WaterSurfacePtr m_surface;
22   double m_windDirection[2];
23   double m_windSpeed;
24   std::random_device m_randomDevice;
25   std::mt19937 m_randomGenerator;
26   std::normal_distribution<> m_normalDistribution;
27   std::vector<ComplexPair> m_fourierAmplitudes;
28
29   double phillipsSpectrum(double k_x, double k_y) const;
30   ComplexPair generateFourierAmplitude(double k_x, double k_y);
31   ComplexPair& fourierAmplitudeAt(int n, int m);
32   void generateFourierAmplitudes();
33   double spatialFrequencyForIndex(int n) const;
34 };