comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: MINIMUM DISTANCE BETWEEN TWO CURVES
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Re: MINIMUM DISTANCE BETWEEN TWO CURVES [message #20437] Fri, 23 June 2000 00:00
promashkin is currently offline  promashkin
Messages: 169
Registered: December 1999
Senior Member
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
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Re: A (too?) simple question about importing data
Next Topic: Re: Overwriting printings

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 16:52:38 PDT 2025

Total time taken to generate the page: 0.00492 seconds