155#define NOTDEF -1024.0
158#define M_3_2_PI 4.71238898038
161#define M_2__PI 6.28318530718
193 fprintf(stderr,
"LSD Error: %s\n",msg);
200#define RELATIVE_ERROR_FACTOR 100.0
215 double abs_diff,aa,bb,abs_max;
218 if( a == b )
return TRUE;
220 abs_diff = fabs(a-b);
223 abs_max = aa > bb ? aa : bb;
230 if( abs_max < DBL_MIN ) abs_max = DBL_MIN;
239static double dist(
double x1,
double y1,
double x2,
double y2)
241 return sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) );
283 if( in == NULL || in->
values == NULL )
284 error(
"free_ntuple_list: invalid n-tuple input.");
285 free( (
void *) in->
values );
298 if( dim == 0 )
error(
"new_ntuple_list: 'dim' must be positive.");
302 if( n_tuple == NULL )
error(
"not enough memory.");
310 n_tuple->
values = (
double *) malloc(
sizeof(
double) * dim * n_tuple->
max_size);
311 if( n_tuple->
values == NULL )
error(
"not enough memory.");
322 if( n_tuple == NULL || n_tuple->
values == NULL || n_tuple->
max_size == 0 )
323 error(
"enlarge_ntuple_list: invalid n-tuple.");
329 n_tuple->
values = (
double *) realloc( (
void *) n_tuple->
values,
331 if( n_tuple->
values == NULL )
error(
"not enough memory.");
338 double v4,
double v5,
double v6,
double v7 )
341 if( out == NULL )
error(
"add_7tuple: invalid n-tuple input.");
342 if( out->
dim != 7 )
error(
"add_7tuple: the n-tuple must be a 7-tuple.");
346 if( out->
values == NULL )
error(
"add_7tuple: invalid n-tuple input.");
386 if( i == NULL || i->
data == NULL )
387 error(
"free_image_char: invalid input image.");
388 free( (
void *) i->
data );
400 if( xsize == 0 || ysize == 0 )
error(
"new_image_char: invalid image size.");
404 if( image == NULL )
error(
"not enough memory.");
405 image->
data = (
unsigned char *) calloc( (
size_t) (xsize*ysize),
406 sizeof(
unsigned char) );
407 if( image->
data == NULL )
error(
"not enough memory.");
410 image->
xsize = xsize;
411 image->
ysize = ysize;
421 unsigned char fill_value )
424 unsigned int N = xsize*ysize;
428 if( image == NULL || image->
data == NULL )
429 error(
"new_image_char_ini: invalid image.");
432 for(i=0; i<
N; i++) image->
data[i] = fill_value;
460 if( xsize == 0 || ysize == 0 )
error(
"new_image_int: invalid image size.");
464 if( image == NULL )
error(
"not enough memory.");
465 image->
data = (
int *) calloc( (
size_t) (xsize*ysize),
sizeof(
int) );
466 if( image->
data == NULL )
error(
"not enough memory.");
469 image->
xsize = xsize;
470 image->
ysize = ysize;
483 unsigned int N = xsize*ysize;
487 for(i=0; i<
N; i++) image->
data[i] = fill_value;
512 if( i == NULL || i->
data == NULL )
513 error(
"free_image_double: invalid input image.");
514 free( (
void *) i->
data );
526 if( xsize == 0 || ysize == 0 )
error(
"new_image_double: invalid image size.");
530 if( image == NULL )
error(
"not enough memory.");
531 image->
data = (
double *) calloc( (
size_t) (xsize*ysize),
sizeof(
double) );
532 if( image->
data == NULL )
error(
"not enough memory.");
535 image->
xsize = xsize;
536 image->
ysize = ysize;
546 unsigned int ysize,
double * data )
551 if( xsize == 0 || ysize == 0 )
552 error(
"new_image_double_ptr: invalid image size.");
553 if( data == NULL )
error(
"new_image_double_ptr: NULL data pointer.");
557 if( image == NULL )
error(
"not enough memory.");
560 image->
xsize = xsize;
561 image->
ysize = ysize;
588 error(
"gaussian_kernel: invalid n-tuple 'kernel'.");
589 if( sigma <= 0.0 )
error(
"gaussian_kernel: 'sigma' must be positive.");
594 for(i=0;i<
kernel->dim;i++)
596 val = ( (
double) i - mean ) / sigma;
597 kernel->values[i] = exp( -0.5 * val * val );
602 if( sum >= 0.0 )
for(i=0;i<
kernel->dim;i++)
kernel->values[i] /= sum;
648 unsigned int N,M,h,n,x,y,i;
649 int xc,yc,j,double_x_size,double_y_size;
650 double sigma,xx,yy,sum,prec;
653 if( in == NULL || in->
data == NULL || in->
xsize == 0 || in->
ysize == 0 )
654 error(
"gaussian_sampler: invalid image.");
655 if( scale <= 0.0 )
error(
"gaussian_sampler: 'scale' must be positive.");
656 if( sigma_scale <= 0.0 )
657 error(
"gaussian_sampler: 'sigma_scale' must be positive.");
660 if( in->
xsize * scale > (
double) UINT_MAX ||
661 in->
ysize * scale > (
double) UINT_MAX )
662 error(
"gaussian_sampler: the output image size exceeds the handled size.");
663 N = (
unsigned int) ceil( in->
xsize * scale );
664 M = (
unsigned int) ceil( in->
ysize * scale );
669 sigma = scale < 1.0 ? sigma_scale / scale : sigma_scale;
679 h = (
unsigned int) ceil( sigma * sqrt( 2.0 * prec * log(10.0) ) );
684 double_x_size = (int) (2 * in->
xsize);
685 double_y_size = (int) (2 * in->
ysize);
688 for(x=0;x<aux->
xsize;x++)
698 xc = (int) floor( xx + 0.5 );
703 for(y=0;y<aux->
ysize;y++)
706 for(i=0;i<
kernel->dim;i++)
711 while( j < 0 ) j += double_x_size;
712 while( j >= double_x_size ) j -= double_x_size;
713 if( j >= (
int) in->
xsize ) j = double_x_size-1-j;
722 for(y=0;y<out->
ysize;y++)
732 yc = (int) floor( yy + 0.5 );
737 for(x=0;x<out->
xsize;x++)
740 for(i=0;i<
kernel->dim;i++)
745 while( j < 0 ) j += double_y_size;
746 while( j >= double_y_size ) j -= double_y_size;
747 if( j >= (
int) in->
ysize ) j = double_y_size-1-j;
785 struct coorlist ** list_p,
void ** mem_p,
789 unsigned int n,p,x,y,adr,i;
790 double com1,com2,gx,gy,norm,norm2;
799 double max_grad = 0.0;
803 error(
"ll_angle: invalid image.");
804 if( threshold < 0.0 )
error(
"ll_angle: 'threshold' must be positive.");
808 if(
n_bins == 0 )
error(
"ll_angle: 'n_bins' must be positive.");
822 *
mem_p = (
void *) list;
828 error(
"not enough memory.");
860 (*modgrad)->data[
adr] = norm;
862 if( norm <= threshold )
870 if( norm > max_grad ) max_grad = norm;
878 norm = (*modgrad)->data[
y*p+
x];
881 i = (
unsigned int) (norm * (
double)
n_bins / max_grad);
932 error(
"isaligned: invalid image 'angles'.");
934 error(
"isaligned: (x,y) out of the image.");
935 if( prec < 0.0 )
error(
"isaligned: 'prec' must be positive.");
950 if( theta < 0.0 ) theta = -theta;
954 if( theta < 0.0 ) theta = -theta;
957 return theta <= prec;
968 if( a < 0.0 ) a = -a;
1014 static double q[7] = { 75122.6331530, 80916.6278952, 36308.2951477,
1015 8687.24529705, 1168.92649479, 83.8676043424,
1017 double a = (
x+0.5) * log(
x+5.5) - (
x+5.5);
1023 a -= log(
x + (
double) n );
1024 b +=
q[n] *
pow(
x, (
double) n );
1048 return 0.918938533204673 + (
x-0.5)*log(
x) -
x
1049 + 0.5*
x*log(
x*
sinh(1/
x) + 1/(810.0*
pow(
x,6.0)) );
1057#define log_gamma(x) ((x)>15.0?log_gamma_windschitl(x):log_gamma_lanczos(x))
1062#define TABSIZE 100000
1132 error(
"nfa: wrong n, k or p values.");
1135 if( n==0 || k==0 )
return -
logNT;
1157 if( (
double) k > (
double) n * p )
1235 if( in == NULL || out == NULL )
error(
"rect_copy: invalid 'in' or 'out'.");
1326static double inter_low(
double x,
double x1,
double y1,
double x2,
double y2)
1329 if( x1 > x2 || x < x1 || x > x2 )
1330 error(
"inter_low: unsuitable input, 'x1>x2' or 'x<x1' or 'x>x2'.");
1335 return y1 + (x-x1) * (y2-y1) / (x2-x1);
1348static double inter_hi(
double x,
double x1,
double y1,
double x2,
double y2)
1351 if( x1 > x2 || x < x1 || x > x2 )
1352 error(
"inter_hi: unsuitable input, 'x1>x2' or 'x<x1' or 'x>x2'.");
1357 return y1 + (x-x1) * (y2-y1) / (x2-x1);
1365 if( iter == NULL )
error(
"ri_del: NULL iterator.");
1366 free( (
void *) iter );
1377 if( i == NULL )
error(
"ri_end: NULL iterator.");
1382 return (
double)(i->
x) > i->
vx[2];
1393 if( i == NULL )
error(
"ri_inc: NULL iterator.");
1402 while( (
double) (i->
y) > i->
ye && !
ri_end(i) )
1425 if( (
double) i->
x < i->
vx[3] )
1445 if( (
double)i->
x < i->
vx[1] )
1451 i->
y = (int) ceil(i->
ys);
1467 if( r == NULL )
error(
"ri_ini: invalid rectangle.");
1471 if( i == NULL )
error(
"ri_ini: Not enough memory.");
1475 vx[0] = r->x1 - r->dy * r->width / 2.0;
1476 vy[0] = r->y1 + r->dx * r->width / 2.0;
1477 vx[1] = r->x2 - r->dy * r->width / 2.0;
1478 vy[1] = r->y2 + r->dx * r->width / 2.0;
1479 vx[2] = r->x2 + r->dy * r->width / 2.0;
1480 vy[2] = r->y2 - r->dx * r->width / 2.0;
1481 vx[3] = r->x1 + r->dy * r->width / 2.0;
1482 vy[3] = r->y1 - r->dx * r->width / 2.0;
1490 if( r->x1 < r->x2 && r->y1 <= r->y2 ) offset = 0;
1491 else if( r->x1 >= r->x2 && r->y1 < r->y2 ) offset = 1;
1492 else if( r->x1 > r->x2 && r->y1 >= r->y2 ) offset = 2;
1498 i->
vx[n] = vx[(offset+n)%4];
1499 i->
vy[n] = vy[(offset+n)%4];
1518 i->
x = (int) ceil(i->
vx[0]) - 1;
1519 i->
y = (int) ceil(i->
vy[0]);
1520 i->
ys = i->
ye = -DBL_MAX;
1538 if( rec == NULL )
error(
"rect_nfa: invalid rectangle.");
1539 if( angles == NULL )
error(
"rect_nfa: invalid 'angles'.");
1543 if( i->
x >= 0 && i->
y >= 0 &&
1544 i->
x < (
int) angles->
xsize && i->
y < (int) angles->
ysize )
1552 return nfa(pts,alg,rec->
p,logNT);
1620 double lambda,theta,
weight;
1627 if( reg == NULL )
error(
"get_theta: invalid region.");
1628 if( reg_size <= 1 )
error(
"get_theta: region size <= 1.");
1629 if( modgrad == NULL || modgrad->
data == NULL )
1630 error(
"get_theta: invalid 'modgrad'.");
1631 if( prec < 0.0 )
error(
"get_theta: 'prec' must be positive.");
1634 for(i=0; i<reg_size; i++)
1642 error(
"get_theta: null inertia matrix.");
1645 lambda = 0.5 * ( Ixx + Iyy - sqrt( (Ixx-Iyy)*(Ixx-Iyy) + 4.0*Ixy*Ixy ) );
1648 theta = fabs(Ixx)>fabs(Iyy) ? atan2(lambda-Ixx,Ixy) : atan2(Ixy,lambda-Iyy);
1662 double prec,
double p,
struct rect * rec )
1664 double x,y,dx,dy,l,w,theta,
weight,sum,l_min,l_max,w_min,w_max;
1668 if( reg == NULL )
error(
"region2rect: invalid region.");
1669 if( reg_size <= 1 )
error(
"region2rect: region size <= 1.");
1670 if( modgrad == NULL || modgrad->
data == NULL )
1671 error(
"region2rect: invalid image 'modgrad'.");
1672 if( rec == NULL )
error(
"region2rect: invalid 'rec'.");
1685 for(i=0; i<reg_size; i++)
1692 if( sum <= 0.0 )
error(
"region2rect: weights sum equal to zero.");
1697 theta =
get_theta(reg,reg_size,x,y,modgrad,reg_angle,prec);
1713 l_min = l_max = w_min = w_max = 0.0;
1714 for(i=0; i<reg_size; i++)
1716 l = ( (
double) reg[i].x - x) * dx + ( (
double) reg[i].y - y) * dy;
1717 w = -( (
double) reg[i].x - x) * dy + ( (
double) reg[i].y - y) * dx;
1719 if( l > l_max ) l_max = l;
1720 if( l < l_min ) l_min = l;
1721 if( w > w_max ) w_max = w;
1722 if( w < w_min ) w_min = w;
1726 rec->
x1 = x + l_min * dx;
1727 rec->
y1 = y + l_min * dy;
1728 rec->
x2 = x + l_max * dx;
1729 rec->
y2 = y + l_max * dy;
1730 rec->
width = w_max - w_min;
1754 int * reg_size,
double * reg_angle,
image_char used,
1761 if( x < 0 || y < 0 || x >= (
int) angles->
xsize || y >= (
int) angles->
ysize )
1762 error(
"region_grow: (x,y) out of the image.");
1763 if( angles == NULL || angles->
data == NULL )
1764 error(
"region_grow: invalid image 'angles'.");
1765 if( reg == NULL )
error(
"region_grow: invalid 'reg'.");
1766 if( reg_size == NULL )
error(
"region_grow: invalid pointer 'reg_size'.");
1767 if( reg_angle == NULL )
error(
"region_grow: invalid pointer 'reg_angle'.");
1768 if( used == NULL || used->
data == NULL )
1769 error(
"region_grow: invalid image 'used'.");
1775 *reg_angle = angles->
data[x+y*angles->
xsize];
1776 sumdx = cos(*reg_angle);
1777 sumdy = sin(*reg_angle);
1781 for(i=0; i<*reg_size; i++)
1782 for(xx=reg[i].x-1; xx<=reg[i].
x+1; xx++)
1783 for(yy=reg[i].y-1; yy<=reg[i].
y+1; yy++)
1784 if( xx>=0 && yy>=0 && xx<(
int)used->
xsize && yy<(
int)used->
ysize &&
1786 isaligned(xx,yy,angles,*reg_angle,prec) )
1790 reg[*reg_size].
x = xx;
1791 reg[*reg_size].
y = yy;
1795 sumdx += cos( angles->
data[xx+yy*angles->
xsize] );
1796 sumdy += sin( angles->
data[xx+yy*angles->
xsize] );
1797 *reg_angle = atan2(sumdy,sumdx);
1806 double logNT,
double log_eps )
1823 r.prec = r.p *
M_PI;
1838 if( (r.width -
delta) >= 0.5 )
1856 if( (r.width -
delta) >= 0.5 )
1878 if( (r.width -
delta) >= 0.5 )
1901 r.prec = r.p *
M_PI;
1928 if(
reg ==
NULL )
error(
"reduce_region_radius: invalid pointer 'reg'.");
1930 error(
"reduce_region_radius: invalid pointer 'reg_size'.");
1931 if(
prec < 0.0 )
error(
"reduce_region_radius: 'prec' must be positive.");
1932 if(
rec ==
NULL )
error(
"reduce_region_radius: invalid pointer 'rec'.");
1934 error(
"reduce_region_radius: invalid image 'used'.");
1936 error(
"reduce_region_radius: invalid image 'angles'.");
2004 if(
reg ==
NULL )
error(
"refine: invalid pointer 'reg'.");
2006 if(
prec < 0.0 )
error(
"refine: 'prec' must be positive.");
2007 if(
rec ==
NULL )
error(
"refine: invalid pointer 'rec'.");
2009 error(
"refine: invalid image 'used'.");
2011 error(
"refine: invalid image 'angles'.");
2042 if(n == 0)
return FALSE;
2079 double * img,
int X,
int Y,
2096 unsigned int xsize,ysize;
2102 if( img ==
NULL ||
X <= 0 || Y <= 0 )
error(
"invalid image input.");
2103 if( scale <= 0.0 )
error(
"'scale' value must be positive.");
2105 if(
quant < 0.0 )
error(
"'quant' value must be positive.");
2107 error(
"'ang_th' value must be in the range (0,180).");
2109 error(
"'density_th' value must be in the range [0,1].");
2110 if(
n_bins <= 0 )
error(
"'n_bins' value must be positive.");
2147 logNT = 5.0 * (
log10( (
double) xsize ) +
log10( (
double) ysize ) ) / 2.0
2202 rec.x1 += 0.5;
rec.y1 += 0.5;
2203 rec.x2 += 0.5;
rec.y2 += 0.5;
2208 rec.x1 /= scale;
rec.y1 /= scale;
2209 rec.x2 /= scale;
rec.y2 /= scale;
2225 free( (
void *) image );
2231 free( (
void *)
reg );
2232 free( (
void *)
mem_p );
2241 error(
"region image to big to fit in INT sizes.");
2251 error(
"too many detections to fit in an INT.");
2255 free( (
void *)
out );
2266 double * img,
int X,
int Y,
double scale,
2288static double *
lsd_scale(
int *
n_out,
double * img,
int X,
int Y,
double scale)
2296static double *
lsd(
int *
n_out,
double * img,
int X,
int Y)
2314#undef RELATIVE_ERROR_FACTOR
__attribute__((constructor))
Definition ashift_lsd.c:1068
static image_int new_image_int(unsigned int xsize, unsigned int ysize)
Definition ashift_lsd.c:455
static ntuple_list new_ntuple_list(unsigned int dim)
Definition ashift_lsd.c:293
static void region2rect(struct point *reg, int reg_size, image_double modgrad, double reg_angle, double prec, double p, struct rect *rec)
Definition ashift_lsd.c:1660
static double get_theta(struct point *reg, int reg_size, double x, double y, image_double modgrad, double reg_angle, double prec)
Definition ashift_lsd.c:1617
static double * LineSegmentDetection(int *n_out, double *img, int X, int Y, double scale, double sigma_scale, double quant, double ang_th, double log_eps, double density_th, int n_bins, int **reg_img, int *reg_x, int *reg_y)
Definition ashift_lsd.c:2078
#define NOTDEF
Definition ashift_lsd.c:155
static double dist(double x1, double y1, double x2, double y2)
Definition ashift_lsd.c:239
static void enlarge_ntuple_list(ntuple_list n_tuple)
Definition ashift_lsd.c:319
static int ri_end(rect_iter *i)
Definition ashift_lsd.c:1374
static void region_grow(int x, int y, image_double angles, struct point *reg, int *reg_size, double *reg_angle, image_char used, double prec)
Definition ashift_lsd.c:1753
static void free_ntuple_list(ntuple_list in)
Definition ashift_lsd.c:281
static image_double ll_angle(image_double in, double threshold, struct coorlist **list_p, void **mem_p, image_double *modgrad, unsigned int n_bins)
Definition ashift_lsd.c:784
struct image_double_s * image_double
static double angle_diff(double a, double b)
Definition ashift_lsd.c:963
static double log_gamma_windschitl(double x)
Definition ashift_lsd.c:1046
static image_double gaussian_sampler(image_double in, double scale, double sigma_scale)
Definition ashift_lsd.c:643
static image_char new_image_char(unsigned int xsize, unsigned int ysize)
Definition ashift_lsd.c:395
#define RELATIVE_ERROR_FACTOR
Definition ashift_lsd.c:200
static rect_iter * ri_ini(struct rect *r)
Definition ashift_lsd.c:1460
static image_int new_image_int_ini(unsigned int xsize, unsigned int ysize, int fill_value)
Definition ashift_lsd.c:479
static double rect_improve(struct rect *rec, image_double angles, double logNT, double log_eps)
Definition ashift_lsd.c:1805
#define TABSIZE
Definition ashift_lsd.c:1062
static void add_7tuple(ntuple_list out, double v1, double v2, double v3, double v4, double v5, double v6, double v7)
Definition ashift_lsd.c:337
static image_double new_image_double(unsigned int xsize, unsigned int ysize)
Definition ashift_lsd.c:521
static void gaussian_kernel(ntuple_list kernel, double sigma, double mean)
Definition ashift_lsd.c:580
struct ntuple_list_s * ntuple_list
struct image_int_s * image_int
static int refine(struct point *reg, int *reg_size, image_double modgrad, double reg_angle, double prec, double p, struct rect *rec, image_char used, image_double angles, double density_th)
Definition ashift_lsd.c:1996
#define NOTUSED
Definition ashift_lsd.c:164
static void rect_copy(struct rect *in, struct rect *out)
Definition ashift_lsd.c:1232
static double rect_nfa(struct rect *rec, image_double angles, double logNT)
Definition ashift_lsd.c:1531
#define M_2__PI
Definition ashift_lsd.c:161
static double nfa(int n, int k, double p, double logNT)
Definition ashift_lsd.c:1124
static void error(char *msg)
Definition ashift_lsd.c:191
static image_char new_image_char_ini(unsigned int xsize, unsigned int ysize, unsigned char fill_value)
Definition ashift_lsd.c:420
static void ri_del(rect_iter *iter)
Definition ashift_lsd.c:1363
static double * inv
Definition ashift_lsd.c:1066
static void free_image_char(image_char i)
Definition ashift_lsd.c:384
static double inter_hi(double x, double x1, double y1, double x2, double y2)
Definition ashift_lsd.c:1348
#define TRUE
Definition ashift_lsd.c:151
#define FALSE
Definition ashift_lsd.c:147
static double angle_diff_signed(double a, double b)
Definition ashift_lsd.c:975
#define USED
Definition ashift_lsd.c:167
static image_double new_image_double_ptr(unsigned int xsize, unsigned int ysize, double *data)
Definition ashift_lsd.c:545
static double inter_low(double x, double x1, double y1, double x2, double y2)
Definition ashift_lsd.c:1326
struct image_char_s * image_char
static double log_gamma_lanczos(double x)
Definition ashift_lsd.c:1012
static void free_image_double(image_double i)
Definition ashift_lsd.c:510
static int double_equal(double a, double b)
Definition ashift_lsd.c:213
static int isaligned(int x, int y, image_double angles, double theta, double prec)
Definition ashift_lsd.c:925
#define M_3_2_PI
Definition ashift_lsd.c:158
static int reduce_region_radius(struct point *reg, int *reg_size, image_double modgrad, double reg_angle, double prec, double p, struct rect *rec, image_char used, image_double angles, double density_th)
Definition ashift_lsd.c:1918
static void ri_inc(rect_iter *i)
Definition ashift_lsd.c:1390
#define log_gamma(x)
Definition ashift_lsd.c:1057
static float kernel(const float *x, const float *y)
Definition colorchecker.c:435
static void weight(const float *c1, const float *c2, const float sharpen, dt_aligned_pixel_t weight)
Definition eaw.c:29
#define M_LN10
Definition math.h:32
#define M_PI
Definition math.h:37
#define N
Definition noiseprofile.c:139
Definition ashift_lsd.c:173
int x
Definition ashift_lsd.c:174
int y
Definition ashift_lsd.c:174
struct coorlist * next
Definition ashift_lsd.c:175
Definition ashift_lsd.c:376
unsigned int xsize
Definition ashift_lsd.c:378
unsigned int ysize
Definition ashift_lsd.c:378
unsigned char * data
Definition ashift_lsd.c:377
Definition ashift_lsd.c:502
unsigned int xsize
Definition ashift_lsd.c:504
unsigned int ysize
Definition ashift_lsd.c:504
double * data
Definition ashift_lsd.c:503
Definition ashift_lsd.c:447
unsigned int xsize
Definition ashift_lsd.c:449
unsigned int ysize
Definition ashift_lsd.c:449
int * data
Definition ashift_lsd.c:448
Definition ashift_lsd.c:271
unsigned int dim
Definition ashift_lsd.c:274
unsigned int size
Definition ashift_lsd.c:272
double * values
Definition ashift_lsd.c:275
unsigned int max_size
Definition ashift_lsd.c:273
Definition ashift_lsd.c:181
int y
Definition ashift_lsd.c:181
int x
Definition ashift_lsd.c:181
Definition ashift_lsd.c:1309
double vy[4]
Definition ashift_lsd.c:1311
int y
Definition ashift_lsd.c:1313
double ys
Definition ashift_lsd.c:1312
int x
Definition ashift_lsd.c:1313
double ye
Definition ashift_lsd.c:1312
double vx[4]
Definition ashift_lsd.c:1310
Definition ashift_lsd.c:1219
double dx
Definition ashift_lsd.c:1224
double theta
Definition ashift_lsd.c:1223
double dy
Definition ashift_lsd.c:1224
double y2
Definition ashift_lsd.c:1220
double x1
Definition ashift_lsd.c:1220
double x2
Definition ashift_lsd.c:1220
double y1
Definition ashift_lsd.c:1220
double p
Definition ashift_lsd.c:1226
double x
Definition ashift_lsd.c:1222
double width
Definition ashift_lsd.c:1221
double prec
Definition ashift_lsd.c:1225
double y
Definition ashift_lsd.c:1222
typedef double((*spd)(unsigned long int wavelength, double TempK))