"Theerasak Photha" <[EMAIL PROTECTED]> wrote in message 
news:[EMAIL PROTECTED]
> On 13 Oct 2006 07:33:17 -0700, [EMAIL PROTECTED] <[EMAIL PROTECTED]> 
> wrote:
>> Hi everyone,
>>
>>   I'm wondering if anyone knows of a way to extract data from a numeric
>> array along a line. I have a gridded dataset which I would like to be
>> able to choose two points and extract a 1-d array of the data values
>> along the line between the two points. Any ideas?
>
> Are these all 45 degree lines or what?
>
> If not, you'll have to use trigonometry and approximate the closest
> matching cell. (Don't worry, Python has maths functions!! :))
>
> -- Theerasak

No need for that messy trig stuff - simpler and faster would be to use 
linear interpolation, since you know the starting and ending cell 
coordinates, and how many values you want, compute the array of... oh, hell, 
here it is:

start = (4,10)
end = (304,310)
n = 11

dn = ((end[0]-start[0])/float(n),(end[1]-start[1])/float(n))
interpedNodes = [ (start[0]+dn[0]*x, start[1]+dn[1]*x) for x in range(n+1) ]

for nod in interpedNodes:
    print nod
print

cellNodes = map(lambda ii: (int(round(ii[0])), int(round(ii[1]))), 
interpedNodes)
for nod in cellNodes:
    print nod

Prints out:
(4.0, 10.0)
(31.272727272727273, 37.272727272727273)
(58.545454545454547, 64.545454545454547)
(85.818181818181813, 91.818181818181813)
(113.09090909090909, 119.09090909090909)
(140.36363636363637, 146.36363636363637)
(167.63636363636363, 173.63636363636363)
(194.90909090909091, 200.90909090909091)
(222.18181818181819, 228.18181818181819)
(249.45454545454547, 255.45454545454547)
(276.72727272727275, 282.72727272727275)
(304.0, 310.0)

(4, 10)
(31, 37)
(59, 65)
(86, 92)
(113, 119)
(140, 146)
(168, 174)
(195, 201)
(222, 228)
(249, 255)
(277, 283)
(304, 310) 


-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to