HighMap library (C++)
Loading...
Searching...
No Matches
core.hpp
Go to the documentation of this file.
1/* Copyright (c) 2023 Otto Link. Distributed under the terms of the GNU General
2 Public License. The full license is in the file LICENSE, distributed with
3 this software. */
4
10#pragma once
11#include <cmath>
12#include <cstdint>
13
14namespace hmap
15{
16
23float abs_smooth(float a, float mu);
24
33float almost_unit_identity(float x);
34
42float almost_unit_identity_c2(float x);
43
51inline float approx_hypot(float a, float b)
52{
53 a = std::abs(a);
54 b = std::abs(b);
55 if (a > b) std::swap(a, b);
56 return 0.414f * a + b;
57}
58
65inline float approx_rsqrt(float a)
66{
67 union
68 {
69 float f;
70 uint32_t i;
71 } conv = {.f = a};
72
73 conv.i = 0x5f3759df - (conv.i >> 1);
74 conv.f *= 1.5F - (a * 0.5F * conv.f * conv.f);
75
76 return conv.f;
77}
78
86int ceil_div(int a, int b);
87
94float fast_exp(float x);
95
102float fast_log(float x);
103
110float gain(float x, float factor);
111
118int highest_power_of_2(int n);
119
127float lerp(float a, float b, float t);
128
139float power_curve(float x, float a, float b);
140
157float sigmoid(float x,
158 float width = 1.f,
159 float vmin = 0.f,
160 float vmax = 1.f,
161 float x0 = 0.f);
162
168float smoothstep3(float x);
169
175float smoothstep3_lower(float x);
176
182float smoothstep3_upper(float x);
183
189float smoothstep5(float x);
190
196float smoothstep5_lower(float x);
197
203float smoothstep5_upper(float x);
204
210float smoothstep7(float x);
211
220float threshold(float x, float x0, float x1);
221
229float threshold_smooth(float x, float x0, float x1);
230
242float trapeze(float x, float x0, float x1, float width);
243
252float trapeze_smooth(float x, float x0, float x1, float width);
253
262float triangle(float x, float vmin, float vmax);
263
264} // namespace hmap
float f(int i, float gi)
Definition distance_transform.cpp:11
Definition algebra.hpp:23
Array smoothstep3_upper(const Array &array)
Cubic smoothstep (zero derivative at 1 only).
Definition math.cpp:289
float trapeze_smooth(float x, float x0, float x1, float width)
Smooth trapezoidal pulse using cubic smoothstep interpolation.
Definition core.cpp:150
Array sigmoid(const Array &array, float width=1.f, float vmin=0.f, float vmax=1.f, float x0=0.f)
Sigmoid function.
Definition math.cpp:236
float fast_log(float x)
Fast natural logarithm approximation.
Definition core.cpp:47
Array smoothstep7(const Array &array)
Seventh-order smoothstep.
Definition math.cpp:370
Array smoothstep5_upper(const Array &array)
Quintic smoothstep (zero derivative at 1 only).
Definition math.cpp:360
Array almost_unit_identity(const Array &array)
Almost unit identity function.
Definition math.cpp:68
Array threshold(const Array &array, float x0, float x1)
Linear threshold.
Definition math.cpp:400
Array smoothstep3(const Array &array, float vmin=0.f, float vmax=1.f)
Cubic smoothstep.
Definition math.cpp:257
Array threshold_smooth(const Array &array, float x0, float x1)
Smooth threshold.
Definition math.cpp:410
float trapeze(float x, float x0, float x1, float width)
Computes a trapezoidal pulse function.
Definition core.cpp:137
int ceil_div(int a, int b)
Integer ceiling division.
Definition core.cpp:31
float approx_rsqrt(float a)
Fast inverse square root approximation.
Definition core.hpp:65
float approx_hypot(float a, float b)
Approximate hypotenuse.
Definition core.hpp:51
Array smoothstep3_lower(const Array &array)
Cubic smoothstep (zero derivative at 0 only).
Definition math.cpp:279
Array smoothstep5_lower(const Array &array)
Quintic smoothstep (zero derivative at 0 only).
Definition math.cpp:350
int highest_power_of_2(int n)
Highest power of 2 less than or equal to n.
Definition pyramid_decomposition.cpp:201
Array smoothstep5(const Array &array, float vmin=0.f, float vmax=1.f)
Quintic smoothstep.
Definition math.cpp:299
Array abs_smooth(const Array &array, float mu, const Array &vshift)
Smooth absolute value.
Definition math.cpp:52
void gain(Array &array, float factor, const Array *p_mask)
Apply a gain correction to the array elements.
Definition filters.cpp:173
float fast_exp(float x)
Fast exponential approximation.
Definition core.cpp:36
Array almost_unit_identity_c2(const Array &array)
Almost unit identity function (C2 variant).
Definition math.cpp:78
Point lerp(const Point &p1, const Point &p2, float t)
Linearly interpolates between two points.
Definition points.cpp:219
float power_curve(float x, float a, float b)
Smooth asymmetric bell-shaped curve on [0,1].
Definition core.cpp:68
float triangle(float x, float vmin, float vmax)
Triangle function between bounds.
Definition core.cpp:155