08-19-2023, 06:52 PM
(This post was last modified: 08-19-2023, 06:53 PM by James D Jarvis.)
a little routine and associated demo for drawing a filled hex.
Code: (Select All)
'Fhex
'by James D. Jarvis August 19,2023
'draw a filled hex
'demo code
Screen _NewImage(500, 500, 32)
rr = 200
For d = 1 To 10
fcirc 250, 250, rr, _RGB32(200, 200, 0)
fhex 250, 250, rr, _RGB32(200, 100, 100)
rr = rr * .86
Next d
For a = 60 To 360 Step 60
ang_line 250, 250, 200, a, _RGB32(250, 0, 0)
Next a
hx = 60: hy = 60: hl = 12
fhex hx, hy, hl, _RGB32(100, 100, 100)
For ha = 30 To 390 Step 60
hx = 60 + (hl * 1.9) * Cos(0.01745329 * ha)
hy = 60 + (hl * 1.9) * Sin(0.01745329 * ha)
fhex hx, hy, hl, _RGB32(ha / 2, ha / 2, ha / 20)
Next ha
Sub fhex (cx As Long, cy As Long, r, klr As _Unsigned Long)
'draw a hex to radius r filled with color klr centeted on cx,cy
rcheck = ((r * .867) * (r * .867))
For dY = -r To r
If dY * dY < rcheck Then
dx = r - Abs(dY / _Pi * 1.81)
Line (cx - dx, dY + cy)-(cx + dx, dY + cy), klr, BF
End If
Next dY
End Sub
'ang_line and fcirc included for demo not needed for fhex itself
Sub ang_line (sx, sy, lnth, ang, klr As _Unsigned Long)
'draw a line lnth units long from sx,sy at anlge ang measures in degrees, 0 deg is out along X axis
nx = sx + lnth * Cos(0.01745329 * ang)
ny = sy + lnth * Sin(0.01745329 * ang)
Line (sx, sy)-(nx, ny), klr
End Sub
Sub fcirc (CX As Long, CY As Long, R, klr As _Unsigned Long)
'draw a filled circle with the quickest filled circle routine in qb64, not my development
Dim subRadius As Long, RadiusError As Long
Dim X As Long, Y As Long
subRadius = Abs(R)
RadiusError = -subRadius
X = subRadius
Y = 0
If subRadius = 0 Then PSet (CX, CY): Exit Sub
Line (CX - X, CY)-(CX + X, CY), klr, BF
While X > Y
RadiusError = RadiusError + Y * 2 + 1
If RadiusError >= 0 Then
If X <> Y + 1 Then
Line (CX - Y, CY - X)-(CX + Y, CY - X), klr, BF
Line (CX - Y, CY + X)-(CX + Y, CY + X), klr, BF
End If
X = X - 1
RadiusError = RadiusError - X * 2
End If
Y = Y + 1
Line (CX - X, CY - Y)-(CX + X, CY - Y), klr, BF
Line (CX - X, CY + Y)-(CX + X, CY + Y), klr, BF
Wend
End Sub