# Filling in Degrees in a Circle (Astronomy)

W. eWatson notvalid2 at sbcglobal.net
Sun Aug 24 01:22:08 CEST 2008

```Dennis Lee Bieber wrote:
> On Fri, 22 Aug 2008 23:18:17 -0700, "W. eWatson"
> <notvalid2 at sbcglobal.net> declaimed the following in comp.lang.python:
>
>
>> I'll take a look. I just posted above yours with a more insightful set of
>> data than the first three pointer. Yes, some way of bisecting, or chopping
>> is the trick here. One is just trying to fill in all the gaps with
>> interpolation and produce 360 points to feed to the telescope software. It's
>> sort of like giving someone, and forgetting interpolation here, the sequence
>> 20, 30, blank, 60, 70, 80 and asking for the two missing tens between 30 and
>> 60. 40 and 50, of course.
>
> 	Presuming the data is an ordered list (in azimuth) of az/el pairs,
> AND that the last measurement does not close the circle (eg: (0, 1),
> (90, 5), (180, 5), (270, 2) ) the first step would be to append a data
> point consisting of the first azimuth data point + 360, but with the
> same elevation value. With normalization at the output, this would work
> if the first data point was not at 0. Then one would perform repeated
> interpolations over pairs of data points, outputting the first pair as
> the first value, and stopping when the azimuth reached the second pair.
>
> 	Something like (watch out for line wrapping):
>
> -=-=-=-=-=-=-
> import pprint
>
> def gatherPoints():
>     pointList = []
>     while True:
>         cAz = raw_input("Enter Azimuth in integer degrees (blank line to
> exit) : ")
>         cAz = cAz.strip()
>         if not cAz: break
>         az = int(cAz)
>         cEl = raw_input("Enter Elevation in real degrees for azimuth %s
> : " % az).strip()
>         el = float(cEl)
>         pointList.append( (az, el) )
>     if pointList:
>         pointList.append( (pointList[0][0] + 360, pointList[0][1]) )
>     return pointList
>
> def interpolate(start, end, step):
>     slope = float(end[1] - start[1]) / (end[0] - start[0])
>     iPoints = [ (i, (slope * (i - start[0])) + start[1])
>                 for i in range(start[0], end[0], step) ]
>     return iPoints
>
>
> if __name__ == "__main__":
>     points = gatherPoints()
>     output = []
>     if points:
>         for s in range(len(points) - 1):
>             output.extend(interpolate(points[s], points[s+1], 1))
>     pprint.pprint(output)
> -=-=-=-=-=-=-
Close. A nice looking piece of code. Something for me to learn from. I play
with python on a pretty irregular basis.

The game here is like someone gives you five distinct integer numbers from 1
to 10 in order, and one needs to write a program to fill in the gaps. In my
case, the numbers go from 0 to 359, and I have lots of gaps. I gave a pretty
illustrative example in a post above. 11:10 pm last night. Of course, not
only the gaps from 0 to 359 need to be filled in, but the interpolated
values of the related values need to be obtained. Elevation.

As I just posted to the fellow below you. I decided this morning and roll up
my sleeves and write the program. I plan to take a deeper plunge in the next
month than my so far erratic look over the last 18 or more months  It's working.

--