Top | ![]() |
![]() |
![]() |
![]() |
#define | ROUND() |
#define | GWY_ROUND() |
GwyXY * | gwy_xy_new () |
GwyXY * | gwy_xy_copy () |
void | gwy_xy_free () |
GwyXYZ * | gwy_xyz_new () |
GwyXYZ * | gwy_xyz_copy () |
void | gwy_xyz_free () |
gdouble | gwy_math_humanize_numbers () |
gboolean | gwy_math_is_in_polygon () |
gint | gwy_math_find_nearest_line () |
gint | gwy_math_find_nearest_point () |
gdouble * | gwy_math_lin_solve () |
gdouble * | gwy_math_lin_solve_rewrite () |
gboolean | gwy_math_tridiag_solve_rewrite () |
gdouble * | gwy_math_fit_polynom () |
gboolean | gwy_math_choleski_decompose () |
void | gwy_math_choleski_solve () |
gboolean | gwy_math_choleski_invert () |
guint | gwy_math_curvature () |
gboolean | gwy_math_refine_maximum_1d () |
gboolean | gwy_math_refine_maximum_2d () |
gboolean | gwy_math_refine_maximum () |
guint * | gwy_check_regular_2d_grid () |
gdouble | gwy_math_median () |
void | gwy_math_sort () |
gdouble | gwy_math_median_uncertainty () |
gdouble | gwy_xlnx_int () |
guint | gwy_math_histogram () |
Function gwy_math_humanize_numbers()
deals with number representation.
Nearest object finding functions gwy_math_find_nearest_line()
and
gwy_math_find_nearest_point()
can be useful in widget and vector layer
implementation.
And gwy_math_lin_solve()
, gwy_math_lin_solve_rewrite()
, and
gwy_math_fit_polynom()
are general purpose numeric methods.
#define ROUND(x) ((gint)floor((x) + 0.5))
ROUND
is deprecated and should not be used in newly-written code.
Rounds a number to nearest integer. Use GWY_ROUND
instead.
#define GWY_ROUND(x) ((gint)floor((x) + 0.5))
Rounds a number to nearest integer.
Since: 2.5
GwyXY * gwy_xy_new (gdouble x
,gdouble y
);
Creates Cartesian coordinates in plane.
This is mostly useful for language bindings.
Since: 2.47
GwyXY *
gwy_xy_copy (const GwyXY *xy
);
Copies Cartesian coordinates in plane.
Since: 2.45
void
gwy_xy_free (GwyXY *xy
);
Frees Cartesian coordinates in plane created with gwy_xy_copy()
.
Since: 2.45
GwyXYZ * gwy_xyz_new (gdouble x
,gdouble y
,gdouble z
);
Creates Cartesian coordinates in space.
This is mostly useful for language bindings.
Since: 2.47
GwyXYZ *
gwy_xyz_copy (const GwyXYZ *xyz
);
Copies Cartesian coordinates in space.
Since: 2.45
void
gwy_xyz_free (GwyXYZ *xyz
);
Frees Cartesian coordinates in space created with gwy_xyz_copy()
.
Since: 2.45
gdouble gwy_math_humanize_numbers (gdouble unit
,gdouble maximum
,gint *precision
);
Finds a human-friendly representation for a range of numbers.
unit |
The smallest possible step. |
|
maximum |
The maximum possible value. |
|
precision |
A location to store |
gboolean gwy_math_is_in_polygon (gdouble x
,gdouble y
,const gdouble *poly
,guint n
);
Establishes wether the test point x
, y
is inside the polygon poly
.
The polygon can be defined either clockwise or anti-clockwise and
can be a concave, convex or self-intersecting polygon.
x |
The x coordinate of the test point. |
|
y |
The y coordinate of the test point. |
|
poly |
An array of coordinate pairs (points) that define a polygon. |
|
n |
The number of corners of the polygon. |
Since: 2.7
gint gwy_math_find_nearest_line (gdouble x
,gdouble y
,gdouble *d2min
,gint n
,const gdouble *coords
,const gdouble *metric
);
Finds the line from coords
nearest to the point (x
, y
).
x |
X-coordinate of the point to search. |
|
y |
Y-coordinate of the point to search. |
|
d2min |
Where to store the squared minimal distance, or |
|
n |
The number of lines (i.e. |
|
coords |
Line coordinates stored as x00, y00, x01, y01, x10, y10, etc. |
|
metric |
Metric matrix (2x2, but stored sequentially by rows: m11, m12,
m21, m22), it must be positive definite. Vector norm is then
calculated as m11*x*x + (m12 + m21)*x*y + m22*y*y.
It can be |
gint gwy_math_find_nearest_point (gdouble x
,gdouble y
,gdouble *d2min
,gint n
,const gdouble *coords
,const gdouble *metric
);
Finds the point from coords
nearest to the point (x
, y
).
x |
X-coordinate of the point to search. |
|
y |
Y-coordinate of the point to search. |
|
d2min |
Location to store the squared minimal distance to, or |
|
n |
The number of points (i.e. |
|
coords |
Point coordinates stored as x0, y0, x1, y1, x2, y2, etc. |
|
metric |
Metric matrix (2x2, but stored sequentially by rows: m11, m12,
m21, m22). Vector norm is then calculated as
m11*x*x + (m12 + m21)*x*y + m22*y*y.
It can be |
gdouble * gwy_math_lin_solve (gint n
,const gdouble *matrix
,const gdouble *rhs
,gdouble *result
);
Solve a regular system of linear equations.
n |
The size of the system. |
|
matrix |
The matrix of the system ( |
|
rhs |
The right hand side of the sytem. |
|
result |
Where the result should be stored. May be |
gdouble * gwy_math_lin_solve_rewrite (gint n
,gdouble *matrix
,gdouble *rhs
,gdouble *result
);
Solves a regular system of linear equations.
This is a memory-conservative version of gwy_math_lin_solve()
overwriting
matrix
and rhs
with intermediate results.
n |
The size of the system. |
|
matrix |
The matrix of the system ( |
|
rhs |
The right hand side of the sytem. |
|
result |
Where the result should be stored. May be |
gboolean gwy_math_tridiag_solve_rewrite (gint n
,gdouble *d
,const gdouble *a
,const gdouble *b
,gdouble *rhs
);
Solves a tridiagonal system of linear equations.
gdouble * gwy_math_fit_polynom (gint ndata
,const gdouble *xdata
,const gdouble *ydata
,gint n
,gdouble *coeffs
);
Fits a polynom through a general (x, y) data set.
ndata |
The number of items in |
|
xdata |
Independent variable data (of size |
|
ydata |
Dependent variable data (of size |
|
n |
The degree of polynom to fit. |
|
coeffs |
An array of size |
The coefficients of the polynom (coeffs
when it was not NULL
,
otherwise a newly allocated array).
gboolean gwy_math_choleski_decompose (gint n
,gdouble *matrix
);
Decomposes a symmetric positive definite matrix in place.
n |
The dimension of |
|
matrix |
Lower triangular part of a symmetric matrix, stored by rows, i.e., matrix = [a_00 a_10 a_11 a_20 a_21 a_22 a_30 ...]. |
Whether the matrix was really positive definite. If FALSE
,
the decomposition failed and a
does not contain any meaningful
values.
void gwy_math_choleski_solve (gint n
,const gdouble *decomp
,gdouble *rhs
);
Solves a system of linear equations with predecomposed symmetric positive
definite matrix a
and right hand side b
.
n |
The dimension of |
|
decomp |
Lower triangular part of Choleski decomposition as computed
by |
|
rhs |
Right hand side vector. Is is modified in place, on return it contains the solution. |
gboolean gwy_math_choleski_invert (gint n
,gdouble *matrix
);
Inverts a symmetric positive definite matrix in place.
n |
Matrix size. |
|
matrix |
Lower triangular part of a symmetric matrix, stored by rows, i.e., matrix = [a_00 a_10 a_11 a_20 a_21 a_22 a_30 ...]. |
Whether the matrix was really positive definite. If FALSE
,
the inversion failed and matrix
does not contain any meaningful
values.
Since: 2.46
guint gwy_math_curvature (const gdouble *coeffs
,gdouble *kappa1
,gdouble *kappa2
,gdouble *phi1
,gdouble *phi2
,gdouble *xc
,gdouble *yc
,gdouble *zc
);
Calculates curvature parameters from two-dimensional quadratic polynomial coefficients.
If the quadratic surface was obtained by fitting the dimensions of the fitted area should not differ, in the lateral coordinates used, by many orders from 1. Otherwise the recognition of flat surfaces might not work.
Curvatures have signs, positive mean a concave (cup-like) surface, negative mean a convex (cap-like) surface. They are ordered including the sign.
Directions are angles from the interval (-π/2, π/2].
If the quadratic surface is degenerate, i.e. flat in at least one direction, the centre is undefined. The centre is then chosen as the closest point the origin of coordinates. For flat surfaces this means the origin is simply returned as the centre position. Consequently, you should use Cartesian coordinates with origin in a natural centre, for instance centre of image or grain.
coeffs |
Array of the six polynomial coefficients of a quadratic surface in the following order: 1, x, y, x², xy, y². |
|
kappa1 |
Location to store the smaller curvature to. |
|
kappa2 |
Location to store the larger curvature to. |
|
phi1 |
Location to store the direction of the smaller curvature to. |
|
phi2 |
Location to store the direction of the larger curvature to. |
|
xc |
Location to store x-coordinate of the centre of the quadratic surface. |
|
yc |
Location to store y-coordinate of the centre of the quadratic surface. |
|
zc |
Location to store value at the centre of the quadratic surface. |
Since: 2.22
gboolean gwy_math_refine_maximum_1d (const gdouble *y
,gdouble *x
);
Performs subpixel refinement of parabolic a one-dimensional maximum.
The central value corresponds to x-coordinate 0, distances between values
are unity. The refinement is based by fitting a parabola through the
maximum. If it fails or the calculated maximum lies farther than the
surrounding values the function sets the refined maximum to the origin and
returns FALSE
.
y |
Array of length 3, containing the neighbourhood values with the maximum in the centre. |
|
x |
Location to store the refined |
TRUE
if the refinement succeeded, FALSE
if it failed. The value
of x
is usable regardless of the return value.
Since: 2.49
gboolean gwy_math_refine_maximum_2d (const gdouble *z
,gdouble *x
,gdouble *y
);
Performs subpixel refinement of parabolic a two-dimensional maximum.
The central value corresponds to coordinates (0,0), distances between values
are unity. The refinement is based by fitting a two-dimensional parabola
through the maximum. If it fails or the calculated maximum lies farther
than the surrounding values the function sets the refined maximum to the
origin and returns FALSE
.
z |
Array of length 9, containing the square 3x3 neighbourhood values in matrix order and with the maximum in the centre. |
|
x |
Location to store the refined |
|
y |
Location to store the refined |
TRUE
if the refinement succeeded, FALSE
if it failed. The values
of x
and y
are usable regardless of the return value.
Since: 2.49
gboolean gwy_math_refine_maximum (const gdouble *z
,gdouble *x
,gdouble *y
);
Performs subpixel refinement of parabolic a two-dimensional maximum.
An alias for gwy_math_refine_maximum_2d()
.
z |
Array of length 9, containing the square 3x3 neighbourhood values in matrix order and with the maximum in the centre. |
|
x |
Location to store the refined |
|
y |
Location to store the refined |
TRUE
if the refinement succeeded, FALSE
if it failed. The values
of x
and y
are usable regardless of the return value.
Since: 2.42
guint * gwy_check_regular_2d_grid (const gdouble *coords
,guint stride
,guint n
,gdouble tolerance
,guint *xres
,guint *yres
,GwyXY *xymin
,GwyXY *xystep
);
Detects if points in plane form a regular rectangular grid oriented along the Cartesian axes.
Points lying in one straight line are not considered to form a rectangle.
When the function fails, i.e. the points do not form a regular grid, the values of output arguments are undefined.
coords |
Array of |
|
stride |
Actual number of double values in one block. It must be at least
2 if |
|
n |
Number of items in |
|
tolerance |
Relative distance from pixel center which is still considered OK. Pass a negative value for some reasonable default. The maximum meaningful value is 0.5, beyond that the point would end up in a different pixel. |
|
xres |
Location where to store the number of columns. |
|
yres |
Location where to store the number of rows. |
|
xymin |
Location where to store the minimum coordinates (top left corner). |
|
xystep |
Location where to store the pixel size. |
On success, a newly allocated array mapping grid indices
(i
*xres
+j
) to indices in coords
. NULL
is returned on failure.
Since: 2.48
gdouble gwy_math_median (gsize n
,gdouble *array
);
Finds median of an array of values using Quick select algorithm.
void gwy_math_sort (gsize n
,gdouble *array
);
Sorts an array of doubles using a quicksort algorithm.
This is usually about twice as fast as the generic quicksort function thanks to specialization for doubles.
gdouble gwy_math_median_uncertainty (gsize n
,gdouble *array
,gdouble *uarray
);
gdouble
gwy_xlnx_int (guint x
);
Calculates natural logarithm multiplied by the argument for integers.
The value for zero x
is taken as the limit, i.e. zero.
This function is useful for entropy calculations where values of n
*log(n
)
can be evaulated a lot for small n
. Therefore, values for small arguments
are tabulated. For large arguments the function is evaluated using the
standard log()
function which is of course slower.
Since: 2.44
guint gwy_math_histogram (const gdouble *values
,guint n
,gdouble min
,gdouble max
,guint nbins
,guint *counts
);
Counts the numbers of values falling into equal-sized bins.
The value of min
must not be larger than max
. The values may lie outside
[min
,max
]. They are not counted in the histogram, nor the returned total.
Rounding rules for values exactly at the edge of two bins are arbitrary and must not be relied upon.
values |
Values to make histogram from. |
|
n |
Number of values in |
|
min |
Minimum value to consider (left edge of histogram). |
|
max |
Maximum value to consider (right edge of histogram). |
|
nbins |
Number of histogram bins (number of |
|
counts |
Array where to store the counts. |
The number of values inside the entire histogram, i.e. at most n
but possibly a reduced count.
Since: 2.49
#define GWY_SQRT3 1.73205080756887729352744634150587236694280525381038
The square root of 3.
GwyNLFitter, non-linear least square fitter;
Math Fallback,fallback mathematical functions