You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.2 KiB
78 lines
2.2 KiB
#pragma once
|
|
#include <cmath>
|
|
#include <functional>
|
|
namespace da {
|
|
namespace sha {
|
|
|
|
namespace FieldTPMSFunctions {
|
|
using FieldTPMSFunction = std::function<double(double x, double y, double z, double coeff)>;
|
|
inline FieldTPMSFunction Primitive(double t = 0) {
|
|
return [=](double x, double y, double z, double coeff) -> double {
|
|
x = x * coeff;
|
|
y = y * coeff;
|
|
z = z * coeff;
|
|
return cos(x) + cos(y) + cos(z) + t;
|
|
};
|
|
}
|
|
|
|
inline FieldTPMSFunction Gyroid(double t = 0) {
|
|
return [=](double x, double y, double z, double coeff) -> double {
|
|
x = x * coeff;
|
|
y = y * coeff;
|
|
z = z * coeff;
|
|
return sin(x) * cos(y) + sin(y) * cos(z) + sin(z) * cos(x) + t;
|
|
};
|
|
}
|
|
|
|
inline FieldTPMSFunction Diamond(double t = 0) {
|
|
return [=](double x, double y, double z, double coeff) -> double {
|
|
x = x * coeff;
|
|
y = y * coeff;
|
|
z = z * coeff;
|
|
return cos(x) * cos(y) * cos(z) - sin(x) * sin(y) * sin(z) + t;
|
|
};
|
|
}
|
|
|
|
inline FieldTPMSFunction Schwarzp(double t = 0) {
|
|
return [=](double x, double y, double z, double coeff) -> double {
|
|
x = x * coeff;
|
|
y = y * coeff;
|
|
z = z * coeff;
|
|
return sin(x) * sin(y) * sin(z) + sin(x) * cos(y) * cos(z) + cos(x) * sin(y) * cos(z) +
|
|
cos(x) * cos(y) * sin(z) + t;
|
|
};
|
|
}
|
|
|
|
inline FieldTPMSFunction DoubleP(double t = 0) {
|
|
return [=](double x, double y, double z, double coeff) -> double {
|
|
x = x * coeff;
|
|
y = y * coeff;
|
|
z = z * coeff;
|
|
return cos(x) * cos(y) + cos(y) * cos(z) + cos(x) * cos(z) +
|
|
0.35 * (cos(2 * x) + cos(2 * y) + cos(2 * z)) + t;
|
|
};
|
|
}
|
|
|
|
inline FieldTPMSFunction Schwarzd(double t = 0) {
|
|
return [=](double x, double y, double z, double coeff) -> double {
|
|
x = x * coeff;
|
|
y = y * coeff;
|
|
z = z * coeff;
|
|
return sin(x) * sin(y) * sin(z) + sin(x) * cos(y) * cos(z) + cos(x) * sin(y) * cos(z) +
|
|
cos(x) * cos(y) * sin(z) + t;
|
|
};
|
|
}
|
|
|
|
inline FieldTPMSFunction DoubleD(double t = 0) {
|
|
return [=](double x, double y, double z, double coeff) -> double {
|
|
x = x * coeff;
|
|
y = y * coeff;
|
|
z = z * coeff;
|
|
return -1 * (cos(x) * cos(y) + cos(y) * cos(z) + cos(x) * cos(z)) -
|
|
1 * (sin(x) * sin(y) * sin(z)) + t;
|
|
};
|
|
}
|
|
|
|
} // namespace FieldTPMSFunctions
|
|
} // namespace sha
|
|
} // namespace da
|