20#include "hdrl_cat_utils_sort.h"
49double fraction(
double x,
double y,
double r_out)
51 double r = sqrt(x * x + y * y);
52 double sqrt2o2 = 0.5 * CPL_MATH_SQRT2;
54 if (r > r_out + sqrt2o2) {
56 }
else if (r < r_out - sqrt2o2) {
74 if (x > 0. && y > 0.) {
77 cosa = x / sqrt(x * x + y * y);
87 double x_a = x - tanao2 + (r_out - r) / cosa;
91 double x_b = x + tanao2 + (r_out - r) / cosa;
95 frac = 0.5 * CPL_MAX(0., x_b - (x - 0.5)) * CPL_MAX(0., x_b - (x - 0.5)) * tanp2a;
96 }
else if (x_b > x + 0.5) {
97 frac = 1. - 0.5 * (x + 0.5 - x_a) * (x + 0.5 - x_a) * tanp2a;
99 frac = 0.5 - (x - x_a) + 0.5 * (x_b - x_a);
121void dchole(
double a[IMNUM+1][IMNUM+1],
double b[IMNUM+1], cpl_size n)
123 double l[IMNUM + 1][IMNUM + 1];
125 cpl_boolean restart = CPL_FALSE;
128 l[0][0] = sqrt(a[0][0]);
130 for (cpl_size k = 1; k < n && !restart; k++) {
132 for (cpl_size j = 0; j <= k - 1; j++) {
134 double sum = a[j][k];
136 for (cpl_size i = 0; i <= j - 1; i++) sum -= l[i][k] * l[i][j];
139 l[j][k] = sum / l[j][j];
142 double sum = a[k][k];
143 for (cpl_size i = 0; i <= k - 1; i++) {
144 sum -= l[i][k] * l[i][k];
150 double aveigv = a[0][0];
151 for (cpl_size i = 1; i < n; i++) aveigv += a[i][i];
153 double offset = 0.1 * aveigv / (double)n;
154 for (cpl_size i = 0; i < n; i++) a[i][i] += offset;
170 y[0] = b[0] / l[0][0];
171 for (cpl_size i = 1; i < n; i++) {
174 for (cpl_size k = 0; k <= i - 1; k++) {
175 sum -= l[k][i] * y[k];
178 y[i] = sum / l[i][i];
182 b[n - 1] = y[n - 1] / l[n - 1][n - 1];
183 for (cpl_size i = n - 2; i >= 0; i--) {
186 for (cpl_size k = i+1; k < n; k++) {
187 sum -= l[i][k] * b[k];
190 b[i] = sum / l[i][i];
double fraction(double x, double y, double r_out)
Fraction of pixel bounded.
void dchole(double a[IMNUM+1][IMNUM+1], double b[IMNUM+1], cpl_size n)
Cholesky decomposition of definite symmetric matrix to solve Ax = b.