diff options
author | taw27 <taw27@bf6ca9ba-c028-0410-8290-897cf20841d1> | 2007-11-13 12:26:08 +0000 |
---|---|---|
committer | taw27 <taw27@bf6ca9ba-c028-0410-8290-897cf20841d1> | 2007-11-13 12:26:08 +0000 |
commit | 54b76ad76148c5cb6093ecb16ca30e92d3c7af3a (patch) | |
tree | 3fc30c4f84b3292d2624403bd4f6e19f58a0ea0b /src/image.c | |
parent | 047d5a36fa67856873857193daee6e962296e641 (diff) |
Nicer pattern centering
git-svn-id: svn://cook.msm.cam.ac.uk:745/diff-tomo/dtr@194 bf6ca9ba-c028-0410-8290-897cf20841d1
Diffstat (limited to 'src/image.c')
-rw-r--r-- | src/image.c | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/src/image.c b/src/image.c index 5290cb4..8eba5f9 100644 --- a/src/image.c +++ b/src/image.c @@ -116,12 +116,11 @@ void image_feature_list_free(ImageFeatureList *flist) { } -ImageFeature *image_feature_closest(ImageFeatureList *flist, double x, double y, double *d) { +ImageFeature *image_feature_closest(ImageFeatureList *flist, double x, double y, double *d, int *idx) { int i; double dmin = +HUGE_VAL; - int closest; - closest = 0; + int closest = 0; for ( i=0; i<flist->n_features; i++ ) { @@ -136,11 +135,45 @@ ImageFeature *image_feature_closest(ImageFeatureList *flist, double x, double y, } - if ( dmin <= 20.0 ) { + if ( dmin < +HUGE_VAL ) { *d = dmin; + *idx = closest; return &flist->features[closest]; } + + return NULL; + +} +ImageFeature *image_feature_second_closest(ImageFeatureList *flist, double x, double y, double *d, int *idx) { + + int i; + double dmin = +HUGE_VAL; + int closest = 0; + double dfirst; + int idxfirst; + + image_feature_closest(flist, x, y, &dfirst, &idxfirst); + + for ( i=0; i<flist->n_features; i++ ) { + + double d; + + d = distance(flist->features[i].x, flist->features[i].y, x, y); + + if ( (d < dmin) && (i != idxfirst) ) { + dmin = d; + closest = i; + } + + } + + if ( dmin < +HUGE_VAL ) { + *d = dmin; + *idx = closest; + return &flist->features[closest]; + } + return NULL; } |