Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'Sub Macro1()
- '
- ' Macro1 Macro
- '
- '
- ' Range("B1").Select
- 'End Sub
- Option Base 1
- Private Sub circlegen()
- Dim r As Integer 'radius value
- Dim xc As Integer 'circle center x value
- Dim yc As Integer 'circle center y value
- Dim x As Integer 'circle pixel x value
- Dim y As Integer 'circle pixel y value
- Dim d As Integer 'discriminant value for determining proximity to locus
- Dim dtest As Integer
- Dim i1 As Integer 'counter 1
- Dim i2 As Integer 'counter 2
- Dim iA As Integer 'circle coord array X coord element counter
- Dim iB As Integer 'circle coord array Y coord element counter
- Dim ar_oct_x()
- Dim ar_oct_y()
- Dim ar_circle()
- 'get seed values from input cells
- r = Cells.Range("B1").Value
- xc = Cells.Range("B2").Value
- yc = Cells.Range("B3").Value
- 'populate seed octant x and y coordinate arrays
- 'plot first point for clockwise movement and d value
- x = 0
- y = r
- d = (5 - (r * 4)) / 4
- i1 = 1 'initialize counter 1
- Do Until x > y 'when x > y, then the midpoint pixel shared by octants has been reached
- 'populate array
- ReDim Preserve ar_oct_x(i1)
- ar_oct_x(i1) = x
- 'y coord
- ReDim Preserve ar_oct_y(i1)
- ar_oct_y(i1) = y
- 'increment counter
- i1 = i1 + 1
- x = x + 1
- If d < 0 Then
- d = d + (2 * x + 1)
- Else
- y = y - 1
- d = d + (2 * (x - y) + 1)
- End If
- Loop
- 'populate final coordinate array with translated octant values
- ReDim ar_circle(1 To 2, 1 To i1 * 8)
- iA = 1
- iB = 1
- For i2 = 1 To UBound(ar_oct_x, 2)
- 'cardinal coordinates
- If ar_oct_x(i2) = 0 Then
- 'N
- ar_circle(iA, iB) = ar_oct_x(i2)
- iB = iB + 1
- ar_circle(iA, iB) = ar_oct_y(i2)
- iA = iA + 1
- iB = iB - 1
- 'S
- ar_circle(iA, iB) = ar_oct_x(i2)
- iB = iB + 1
- ar_circle(iA, iB) = -(ar_oct_y(i2))
- iA = iA + 1
- iB = iB - 1
- 'E
- ar_circle(iA, iB) = ar_oct_y(i2)
- iB = iB + 1
- ar_circle(iA, iB) = ar_oct_x(i2)
- iA = iA + 1
- iB = iB - 1
- 'W
- ar_circle(iA, iB) = -(ar_oct_y(i2))
- iB = iB + 1
- ar_circle(iA, iB) = ar_oct_x(i2)
- iA = iA + 1
- iB = iB - 1
- End If
- 'Ordinal coordinates
- If ar_oct_x(i2) = ar_oct_y(i2) Then
- End If
- Next
- dtest = 1
- End Sub
Add Comment
Please, Sign In to add comment