Dynamic Neural Field Composer 0.0.0
A C++20 library and interactive application for building and simulating Dynamic Neural Field (DNF) architectures.
Loading...
Searching...
No Matches
gauss_kernel_2d.h
Go to the documentation of this file.
1#pragma once
2
3#include <cmath>
4#include <sstream>
5#include <iomanip>
6#include <optional>
7
8#include "tools/math.h"
9#include "kernel.h"
10
12{
14 {
15 double width; // isotropic sigma (same for x and y)
16 double amplitude;
20
21 explicit GaussKernel2DParameters(double width = 3.0, double amplitude = 3.0,
22 double amplitudeGlobal = -0.01,
23 bool circular = true, bool normalized = true)
26 {}
27
28 bool operator==(const GaussKernel2DParameters& other) const
29 {
30 constexpr double epsilon = 1e-6;
31 return std::abs(width - other.width) < epsilon &&
32 std::abs(amplitude - other.amplitude) < epsilon &&
33 std::abs(amplitudeGlobal - other.amplitudeGlobal) < epsilon &&
34 circular == other.circular &&
35 normalized == other.normalized;
36 }
37
38 [[nodiscard]] std::string toString() const override
39 {
40 std::ostringstream result;
41 result << std::fixed << std::setprecision(2);
42 result << "Parameters: ["
43 << "Width: " << width << ", "
44 << "Amplitude: " << amplitude << ", "
45 << "Amplitude global: " << amplitudeGlobal << ", "
46 << "Circular: " << (circular ? "true" : "false") << ", "
47 << "Normalized: " << (normalized ? "true" : "false") << "]";
48 return result.str();
49 }
50 };
51
52 class GaussKernel2D final : public Kernel
53 {
54 private:
55 GaussKernel2DParameters parameters;
56 std::array<int, 2> kernelRange_x{};
57 std::array<int, 2> kernelRange_y{};
58 std::vector<int> extIndex_x;
59 std::vector<int> extIndex_y;
60 std::vector<double> kernel_1d_x;
61 std::vector<double> kernel_1d_y;
62 std::vector<double> scratchTmp_;
63 std::vector<double> scratchConvolution_;
64 public:
65 GaussKernel2D(const ElementCommonParameters& elementCommonParameters,
66 const GaussKernel2DParameters& parameters);
67
68 void init() override;
69 void step(double t, double deltaT) override;
70 std::string toString() const override;
71 std::shared_ptr<Element> clone() const override;
72
73 void setParameters(const GaussKernel2DParameters& parameters);
75 };
76}
Definition gauss_kernel_2d.h:53
void init() override
Initialize the element (called once before the simulation loop).
Definition gauss_kernel_2d.cpp:18
GaussKernel2DParameters getParameters() const
Definition gauss_kernel_2d.cpp:113
void setParameters(const GaussKernel2DParameters &parameters)
Definition gauss_kernel_2d.cpp:107
std::shared_ptr< Element > clone() const override
Definition gauss_kernel_2d.cpp:102
std::string toString() const override
Definition gauss_kernel_2d.cpp:94
void step(double t, double deltaT) override
Advance the element by one time step.
Definition gauss_kernel_2d.cpp:75
Abstract base class for all convolution-based interaction kernels.
Definition kernel.h:17
Definition element_parameters.h:10
Definition element_parameters.h:188
Definition element_parameters.h:206
Definition gauss_kernel_2d.h:14
bool operator==(const GaussKernel2DParameters &other) const
Definition gauss_kernel_2d.h:28
GaussKernel2DParameters(double width=3.0, double amplitude=3.0, double amplitudeGlobal=-0.01, bool circular=true, bool normalized=true)
Definition gauss_kernel_2d.h:21
double amplitude
Definition gauss_kernel_2d.h:16
double amplitudeGlobal
Definition gauss_kernel_2d.h:17
bool normalized
Definition gauss_kernel_2d.h:19
bool circular
Definition gauss_kernel_2d.h:18
double width
Definition gauss_kernel_2d.h:15
std::string toString() const override
Definition gauss_kernel_2d.h:38