""" BallisticDeployMk0Mod0.py AV:T Ballisics Deploy Nomogram Outputs a *.pdf file """ #****************************************************************************** # globals #****************************************************************************** # Imports from ChartPane import * #****************************************************************************** # Global variables and initialization code #****************************************************************************** MU1 = 5.0 MU3 = 1.0 #****************************************************************************** # Class definitions #****************************************************************************** #****************************************************************************** # Function definitions #****************************************************************************** #-------------------------------------- def xScale(x): return x #-------------------------------------- def yScale(y): return y #-------------------------------------- def burnFunction(burn, junk): return (1.0, burn * MU1) #-------------------------------------- def r_defFunction(r_def, junk): return (0.0, r_def * MU3) #-------------------------------------- def srvtofFunction(srv, tof): return ((srv/MU1) / ((MU1+(srv*MU3))/(MU3*MU1)), (srv*tof) / ((1/MU3)+(srv/MU1))) #-------------------------------------- def tofsrvFunction(tof, srv): return ((srv/MU1) / ((MU1+(srv*MU3))/(MU3*MU1)), (srv*tof) / ((1/MU3)+(srv/MU1))) #-------------------------------------- def main(): fileName = "BallisticDeployMk0Mod0py.pdf" page = Page((11.0, 8.5), (0.125+0.2, 0.125+0.2)) # chart data burn = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0] r_def = range(0,51) tof = range(1,17) srv = range(1,9) xLimit = [9999.0, 0.0] yLimit = [9999.0, 0.0] aCoord = [0.0, 0.0] for aBurn in burn: aCoord[Coord.X], aCoord[Coord.Y] = burnFunction(aBurn, 0.0) if aCoord[Coord.X] < xLimit[Bound.MIN]: xLimit[Bound.MIN] = aCoord[Coord.X] if aCoord[Coord.X] > xLimit[Bound.MAX]: xLimit[Bound.MAX] = aCoord[Coord.X] if aCoord[Coord.Y] < yLimit[Bound.MIN]: yLimit[Bound.MIN] = aCoord[Coord.Y] if aCoord[Coord.Y] > yLimit[Bound.MAX]: yLimit[Bound.MAX] = aCoord[Coord.Y] for aR_def in r_def: aCoord[Coord.X], aCoord[Coord.Y] = r_defFunction(aR_def, 0.0) if aCoord[Coord.X] < xLimit[Bound.MIN]: xLimit[Bound.MIN] = aCoord[Coord.X] if aCoord[Coord.X] > xLimit[Bound.MAX]: xLimit[Bound.MAX] = aCoord[Coord.X] if aCoord[Coord.Y] < yLimit[Bound.MIN]: yLimit[Bound.MIN] = aCoord[Coord.Y] if aCoord[Coord.Y] > yLimit[Bound.MAX]: yLimit[Bound.MAX] = aCoord[Coord.Y] pane = ChartPane(page.margin, page.printable, xLimit, xScale, yLimit, yScale) drawing = Drawing(page.sheet[Dim.WIDTH], page.sheet[Dim.HEIGHT]) # NOMOGRAM # burn scale AddCurvedTickPoints(drawing, pane, page, burn, [0.0], burnFunction, theStrokeWidth=0.50, labelTickEnds='b', theLabelSize=16) # r_def scale AddCurvedTickLines(drawing, pane, page, r_def, [0.0], r_defFunction, tickEnds='ab', tickMetric = True, theStrokeWidth=0.50, labelTickEnds='a', theLabelSize=16) # srv-tof grid AddCurvedTickLines(drawing, pane, page, srv, tof, srvtofFunction, tickEnds='', theStrokeWidth=0.50, labelEnds='ab', theLabelSize=10) AddCurvedTickLines(drawing, pane, page, tof, srv, tofsrvFunction, tickEnds='', theStrokeWidth=0.50, labelEnds='ab', theLabelSize=10) # labels AddLabel(drawing, pane, "Ballistic Deployment Nomogram (Mk0/Mod0)", (0.05, 47), xScale, yScale, theLabelSize=20) AddLabel(drawing, pane, "R_DEP = sRV * (ToF - Burn)", (0.05, 44), xScale, yScale, theLabelSize=18) AddLabel(drawing, pane, """Copyright © 2334 University of Olympia WARNING: Nomogram does not take into account the linkage between Burn and sRV""", (0.05, 40), xScale, yScale, theLabelSize=16) AddLabel(drawing, pane, "Deployment Range", (0.07, 32), xScale, yScale, theLabelSize=20, theLabelAngle=-90) AddLabel(drawing, pane, "Time of Flight", (0.65, 23), xScale, yScale, theLabelSize=20, theLabelAngle=-90) AddLabel(drawing, pane, "Burn", (0.95, 27), xScale, yScale, theLabelSize=20, theLabelAngle=-90) AddLabel(drawing, pane, "Segmented Relative Velocity", (0.35, 1), xScale, yScale, theLabelSize=20) renderPDF.drawToFile(drawing, fileName, '') print "all done" #****************************************************************************** # module/program switch if __name__ == "__main__": main()