'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' POLAR.BAS (C) 1995 TOSHIHIRO HORIE. ALL RIGHTS RESERVED. ' Polar coordinate graph plotter. Enter formula in subroutine Formula:. '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ON ERROR GOTO ErrorFix PI# = 3.1415927#: TPI# = PI# * 2 XS = 640: YS = 350 XC = XS / 2: YC = YS / 2 XI = XS / 15 SR# = 4 * (YS / XS) / 3 DR = .04: 'Step size make this .05 for fast output ST = 5 CL = 15 SCREEN 9: KEY OFF: CLS ' 128K EGA required. ' substitute normal palette with a brighter one. FOR J = 0 TO 15 PALETTE J, J + 48 NEXT J LOCATE 1, 23: COLOR 12, 0: PRINT "POLAR COORDINATE GRAPHER by Toshi Horie" LOCATE 25, 71: COLOR 7, 0: PRINT DATE$; : COLOR 15, 0 GOSUB Formula RESTORE: READ A$: LOCATE 2, 25: PRINT "graph of: "; A$ ' slow 'FOR N = 1 TO ST ' FOR A = 0 TO PI# STEP .1 / N ' Y1 = -SR# * XI * N * SIN(A) + YC ' Y0 = YC - (-SR# * XI * N * SIN(A)) ' X1 = XI * N * COS(A) + XC ' PSET (X1, Y1), 7: PSET (X1 - 1, Y1), 7 ' PSET (X1, Y0), 7: PSET (X1 - 1, Y0), 7 ' NEXT A 'NEXT N ' fast and works now! FOR N = 1 TO ST CIRCLE (XC, YC), XI * N, 3 CIRCLE (XC - 1, YC), XI * N, 3 NEXT N FOR B = 0 TO TPI# STEP TPI# / 24 y2 = SR# * XI * ST * SIN(B) + YC x2 = XI * ST * COS(B) + XC LINE (XC, YC)-(x2, y2), 2: LINE (XC - 1, YC)-(x2 - 1, y2), 2 NEXT B ' MAIN PROGRAM C = 0: GOSUB Formula Y = YC - (SR# * R * XI * SIN(C)) X = XC + (R * XI * COS(C)) PSET (X, Y), CL FOR C = 0 TO TPI# STEP DR GOSUB Formula Y = YC - (SR# * R * XI * SIN(C)) X = XC + (R * XI * COS(C)) LINE -(X, Y), CL 'PSET (X, Y), CL: PSET (X - 1, Y), CL CL = 15 NEXT C LOCATE 1, 1 FOR C = 0 TO PI# STEP TPI# / 24 GOSUB Formula G = C * 180 / PI# COLOR CL, 0 PRINT USING "###"; G; IF R > 99.9 THEN PRINT " +ì " ELSEIF R < -99.9 THEN PRINT " -ì " ELSE PRINT USING "###.##"; R END IF CL = 15 NEXT C LOCATE 1, 1 FOR C = PI# TO TPI# STEP TPI# / 24 GOSUB Formula G = C * 180 / PI# LOCATE , 70 COLOR CL, 0 PRINT USING "###"; G; IF R > 99.9 THEN PRINT " +ì " ELSEIF R < -99.9 THEN PRINT " -ì " ELSE PRINT USING "###.##"; R END IF CL = 15 NEXT C END ErrorFix: row = CSRLIN col = POS(0) LOCATE 23, 1: PRINT USING "Error at ###ø"; G LOCATE 23, 1: PRINT USING "Error at ###ø"; C * 180 / PI# CL = 4: R = 0 LOCATE row, col RESUME NEXT Formula: : EC = 1 : K = 2: 'CONIC SECTION, F AT ORIGIN : R = K * EC / (1 + EC * COS(C)) DATA "R = parabola" RETURN