[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

*Subject*: Re: MINIMUM DISTANCE BETWEEN TWO CURVES*From*: Pavel Romashkin <promashkin(at)cmdl.noaa.gov>*Date*: Fri, 23 Jun 2000 11:13:59 -0600*Newsgroups*: comp.lang.idl-pvwave*Organization*: NOAA-CMDL-CIRES*References*: <3952cdf9_6@news.cadvision.com>*Reply-To*: promashkin(at)cmdl.noaa.gov*Xref*: news.doit.wisc.edu comp.lang.idl-pvwave:20047

Mark, As far as I can tell from "f and g are unknown functions" and "Only know g and f by some points in 3D space", it looks to me that you are trying to find the closest points of two FLTARR(x, 3) arrays (or similar XYZ description) in 3D coordinates. Will a simple method like this work for you? ; Make fake data that are not a line x = findgen(1000) x = [[x], [x], [x]] x[*, 0] = x[*, 0]+20*sin(x[*, 0]*0.05)+randomu(seed, 1000)*10 x[*, 1] = x[*, 1]+25*sin(x[*, 0]*0.02)+randomu(seed, 1000)*5 x[*, 2] = x[*, 1]+28*sin(x[*, 0]*0.1)+randomu(seed, 1000)*20 y = x^1.5 * 0.75 ; X and Y are the two curves A and B that you mention. ;Lets try to execute the following on them: function test, x, y, min_delta=min_delta start = systime(1) min_delta = sqrt((x[0, 0] - y[0, 0])^2+(x[0, 1] - y[0, 1])^2+(x[0, 2] - y[0, 2])^2) loc = 0 for i=0, n_elements(x)/3-1 do begin delta_x = x[i, 0] - y[*, 0] delta_y = x[i, 1] - y[*, 1] delta_z = x[i, 2] - y[*, 2] delta = sqrt(delta_x^2+delta_y^2+delta_z^2) temp = min(delta, /nan) if temp le min_delta then begin min_delta = temp loc = i endif endfor print, "Finished in", systime(1)-start, ' s' return, loc end IDL> print, test(x, y) Finished in 0.61666667 s 338 Min_delta can be retrieved via keyword. The loop is slow, sorry. I am sure one of the Pros would be able to speed it up with Histogram :-) Hope this helps. Cheers, Pavel "Mark C." wrote: > > Given: > a=f(x,y,z) and b=g(x,y,z), both a and b are separate curves. (Not straight > lines. Nor do they loop over themselves). f and g are unknown functions. > Only know g and f by some points in 3D space. Points are irregularly spaced. > > Objective: > Find the minimum distance between a and b. Give the coordinate where this > minimum occurs in term of the nearest point on a and the nearest point on b. > > Needs help: > Does anyone have a routine to do such calculation using IDL? Any other > suggestions appreciated. > > Thanks in advance, > Mark Chan

**References**:**MINIMUM DISTANCE BETWEEN TWO CURVES***From:*Mark C.

- Prev by Date:
**Re: Overwriting printings** - Next by Date:
**Re: A (too?) simple question about importing data** - Prev by thread:
**MINIMUM DISTANCE BETWEEN TWO CURVES** - Next by thread:
**Re: Phase Unwrapping algorithm in IDL** - Index(es):