Dennis Lee Bieber wrote:
On Fri, 22 Aug 2008 23:18:17 -0700, "W. eWatson"
<[EMAIL PROTECTED]> 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.


--
           Wayne Watson (Watson Adventures, Prop., Nevada City, CA)

             (121.015 Deg. W, 39.262 Deg. N) GMT-8 hr std. time)
              Obz Site:  39° 15' 7" N, 121° 2' 32" W, 2700 feet

                    Web Page: <www.speckledwithstars.net/>
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to