W. eWatson wrote:
The other night I surveyed a site for astronomical use by measuring the
altitude (0-90 degrees above the horizon) and az (azimuth, 0 degrees
north clockwise around the site to 360 degrees, almost north again) of
obstacles, trees. My purpose was to feed this profile of obstacles
(trees) to an astronomy program that would then account for not sighting
objects below the trees.
When I got around to entering them into the program by a file, I found
it required the alt at 360 azimuth points in order from 0 to 360 (same
as 0). Instead I have about 25 points, and expected the program to be
able to do simple linear interpolation between those.
Is there some simple operational device in Python that would allow me to
create an array (vector) of 360 points from my data by interpolating
between azimuth points when necessary? All my data I rounded to the
nearest integer. Maybe there's an interpolation operator?
As an example, supposed I had made 3 observations: (0,0) (180,45) and
(360,0). I would want some thing like (note the slope of the line from 0
to 179 is 45/180 or 0.25):
alt: 0, 0.25, 0.50, 0.75, ... 44.75, 45.0
az : 0, 1, 2, 3, 180
Of course, I don't need the az.
If I understand you right, I think using interpolation as provided by
scipy would do what you need.
Here's an example:
from scipy.interpolate.interpolate import interp1d
angles = [0, 22, 47.5, 180, 247.01, 360]
altitudes = [18, 18, 26, 3, 5, 18]
desired_angles = range(0, 361)
skyline = interp1d(angles, altitudes, kind="linear")
vals = skyline(desired_angles)
# that is, vals will be the interpolated altitudes at each of the
# desired angles.
if 1: # plot this out with matplotlib
import pylab as mx
mx.figure()
mx.plot(angles, altitudes, 'x')
mx.plot(desired_angles, vals)
mx.show()
--
http://mail.python.org/mailman/listinfo/python-list