'*********************************************** ' 'Polar1.bas by Nally + April 2000 'Released as open source ' 'Polar1.bas plots the function defined 'by R = 2.5 + 2*sin(12*phi) using polar 'coordinates. ' 'To change the function plotted, locate 'the branch label [Plot.click]. The 'function is defined a few lines below 'that branch label. ' '*********************************************** pi = 3.141592 PlotType$ = "Markers" MarkerValue$ = "set" LineValue$ = "reset" Scalefactor = 1 BiggestXY = 0 xmin = 0 xmax = 0 ymin = 0 ymax = 0 Dim R(360) Dim x(360) Dim y(360) Dim xscaled(360) Dim yscaled(360) Dim xplot(360) Dim yplot(360) NoMainWin WindowWidth = 440 WindowHeight = 265 Graphicbox #main.PlotArea, 214, 21, 200, 200 Button #main.Plot, "Plot !", [Plot.click], UL, 25, 126, 170, 30 Groupbox #main.groupbox4, "Plot Appearance", 26, 16, 168, 105 Radiobutton #main.radioMarkers, " Plot markers", [markers.Set], [markers.Set], 38, 46, 112, 20 Radiobutton #main.radioLines, " Plot Lines", [Lines.Set], [Lines.Set], 38, 71, 96, 20 Button #main.About, "About...", [About.click], UL, 30, 186, 74, 25 Button #main.Quit, "Quit", [Quit.click], UL, 118, 186, 72, 25 Open "Plotting Polar Coordinates" For Window As #main Print #main.PlotArea, "fill white; flush" Print #main, "font arial 10" Print #main, "trapclose [Quit.click]" GoSub [Print.Initial.Control.Values] [main.inputLoop] 'wait here for input event Wait GoTo [main.inputLoop] [Quit.click] Close #main: End [Print.Initial.Control.Values] Print #main.radioMarkers, "Set" Print #main.PlotArea, "fill white" Return [markers.Set] Print #main.radioMarkers, "value? MarkerValue$" If (MarkerValue$ = "set") Then PlotType$ = "Markers" End If If (MarkerValue$ = "reset") Then PlotType$ = "Lines" End If GoTo [main.inputLoop] [Lines.Set] Print #main.radioLines, "value? LineValue$" If (LineValue$ = "set") Then PlotType$ = "Lines" End If If (LineValue$ = "reset") Then PlotType$ = "Markers" End If GoTo [main.inputLoop] [Plot.click] 'for all angles between zero and 360 degrees, 'find the value of R as defined by 'R = 2.5 + 2*sin(12*phi) For degree = 0 to 360 phi = (degree/360) *(2*pi) R(degree) = 2.5 + 2*Sin(12*phi) Next degree 'Convert polar coordinates to 'cartesian coordinates For degree = 0 to 360 phi = (degree/360) * (2*pi) x(degree) = R(degree) * Cos(phi) y(degree) = R(degree) * Sin(phi) Next degree 'Find the extreme values of all cartesian 'x and y values as a prelude to 'finding the scalefactor xmax = 0 xmin = 0 ymax = 0 ymin = 0 For degree = 0 to 360 If (x(degree) > xmax) Then xmax = x(degree) If (x(degree) < xmin) Then xmin = x(degree) If (y(degree) > ymax) Then ymax = y(degree) If (y(degree) < ymin) Then ymin = y(degree) Next degree BiggestXY = 0 If (abs(xmax) > BiggestXY) Then BiggestXY = abs(xmax) If (abs(xmin) > BiggestXY) Then BiggestXY = abs(xmin) If (abs(ymax) > BiggestXY) Then BiggestXY = abs(ymax) If (abs(ymin) > BiggestXY) Then BiggestXY = abs(ymin) 'Establish the scalefactor Scalefactor = 90 / BiggestXY 'Create a scaled set of the cartesian coordinates 'so that the data will plot nicely in the Graphicbox For degree = 0 to 360 xscaled(degree) = Scalefactor * x(degree) yscaled(degree) = Scalefactor * y(degree) Next degree 'Shift the data set to the center of the 'Graphicbox, while also reversing the 'direction of y. For degree = 0 to 360 xplot(degree) = 100 + xscaled(degree) yplot(degree) = 100 - yscaled(degree) Next degree If (PlotType$ = "Lines") Then [Skip.To.Lines] 'If markers have been selected, plot markers Print #main.PlotArea, "discard" Print #main.PlotArea, "cls" Print #main.PlotArea, "fill white" Print #main.PlotArea, "down" For degree = 0 to 360 Print #main.PlotArea, "place " + Str$(xplot(degree)) + " " + Str$(yplot(degree)) Print #main.PlotArea, "circle 2" Next degree GoTo [Plotting.Accomplished] [Skip.To.Lines] 'If lines have been selected, plot lines Print #main.PlotArea, "discard" Print #main.PlotArea, "cls" Print #main.PlotArea, "fill white" Print #main.PlotArea, "down" For degree = 1 to 360 xplot1 = xplot(degree - 1) yplot1 = yplot(degree - 1) xplot2 = xplot(degree) yplot2 = yplot(degree) Print #main.PlotArea, "line " + Str$(xplot1) + " " + Str$(yplot1) + " " + _ Str$(xplot2) + " " + Str$(yplot2) Next degree [Plotting.Accomplished] Print #main.PlotArea, "flush" GoTo [main.inputLoop] [About.click] Notice "About Plotting Polar Coordinates" + Chr$(13) + _ "By Nally + April 2000 " + Chr$(13) + _ "Made with Liberty Basic " + Chr$(13) + _ "Released as open source " GoTo [main.inputLoop]
You need to enable Javascript in your browser to edit pages.
help on how to format text
Polar1.bas
companion program to the articleUNDERSTANDING AND PLOTTING POLAR COORDINATES by Tom Nally