#pragma once
-#include "watersurface.h"
+#include <complex>
+#include <random>
+
+#include "seafwd.h"
+
+#include "complexpair.h"
+#include "watersurfacefwd.h"
class Sea
{
public:
- Sea(WaterSurface& surface);
+ Sea(WaterSurfacePtr surface);
void update();
private:
- WaterSurface& m_surface;
+ 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<ComplexPair> m_fourierAmplitudes;
+
+ 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;
};