here is demo adding tilts to the rings using RotoZoom and _PutImage, more advanced graphics commands:
Code: (Select All)
Option _Explicit
_Title "Arc of Ellipse 2 add tilt demo" 'b+ 2021-12-25 tilt added 2026-02-07
Dim sw, sh, img&, x, y, tilt
sw = 600: sh = 600
Screen _NewImage(sw, sh, 32)
_ScreenMove 300, 200
ArcRingOfEllipse sw / 2, sh / 2, 120, 200, _Pi(0), _Pi(1), .25, &HFFAAAAFF
Ring sw / 2, sh / 2, 0, 85, &HFF880088
ArcRingOfEllipse sw / 2, sh / 2, 120, 200, _Pi(1), _Pi(1.999), .25, &HFFAAAAFF
' copy this image into a container
img& = _NewImage(sw, sh, 32) ' screen sized container
_PutImage , 0, img& ' the easiest use of _PutImage!!!
Cls ' disappear screen image
' now RotoZoom image
tilt = 65
For y = 150 To 450 Step 300
For x = 150 To 450 Step 300
RotoZoom x, y, img&, .25, tilt
tilt = tilt + 65
Next
Next
Sub Ring (cx, cy, innerRadius, outerRadius, colr~&) ' wont work well with alpha's < 255
Dim r
For r = innerRadius To outerRadius Step .25
Circle (cx, cy), r, colr~&
Next
End Sub
'ra's here go Counter Clockwise from East
Sub ArcRing (cx, cy, innerRadius, outerRadius, raStart, raEnd, colr~&) ' ra's 0 to <2*pi (almost)
Dim r
For r = innerRadius To outerRadius Step .25
Circle (cx, cy), r, colr~&, raStart, raEnd
Next
End Sub
'ra's here go Counter Clockwise from East
Sub ArcRingOfEllipse (cx, cy, innerRadius, outerRadius, raStart, raEnd, aspect, colr~&) ' ra's 0 to <2*pi (almost)
Dim r
For r = innerRadius To outerRadius Step .25
Circle (cx, cy), r, colr~&, raStart, raEnd, aspect
Next
End Sub
Sub RotoZoom (X As Long, Y As Long, Image As Long, Scale As Single, degreesRotation As Single)
Dim px(3) As Single, py(3) As Single, W&, H&, sinr!, cosr!, i&, x2&, y2&
W& = _Width(Image&): H& = _Height(Image&)
px(0) = -W& / 2: py(0) = -H& / 2: px(1) = -W& / 2: py(1) = H& / 2
px(2) = W& / 2: py(2) = H& / 2: px(3) = W& / 2: py(3) = -H& / 2
sinr! = Sin(-degreesRotation / 57.2957795131): cosr! = Cos(-degreesRotation / 57.2957795131)
For i& = 0 To 3
x2& = (px(i&) * cosr! + sinr! * py(i&)) * Scale + X: y2& = (py(i&) * cosr! - px(i&) * sinr!) * Scale + Y
px(i&) = x2&: py(i&) = y2&
Next
_MapTriangle (0, 0)-(0, H& - 1)-(W& - 1, H& - 1), Image& To(px(0), py(0))-(px(1), py(1))-(px(2), py(2))
_MapTriangle (0, 0)-(W& - 1, 0)-(W& - 1, H& - 1), Image& To(px(0), py(0))-(px(3), py(3))-(px(2), py(2))
End Sub
724 855 599 923 575 468 400 206 147 564 878 823 652 556 bxor cross forever

