# Filling in Degrees in a Circle (Astronomy)

tom tom1189 at removethis.verizon.net
Sat Aug 23 23:28:12 CEST 2008

```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()

```