_TITLE "fTiltEllipse tests" 'b+ 2019-12-15 'test code from "Draw megaphone Test, click 4 points in clockwise direction first pair is one opening and 2nd is 2nd." 'B+ 2019-12-15
CONST xmax
= 800, ymax
= 600
WHILE pi
< 4 'get 4 mouse clicks pi = pi + 1
LINE (mx
(2), my
(2))-(mx
(3), my
(3)) LINE (mx
(4), my
(4))-(mx
(1), my
(1)) ang1
= _ATAN2(my
(2) - my
(1), mx
(2) - mx
(1)) maj1
= (_HYPOT(mx
(1) - mx
(2), my
(1) - my
(2))) / 2 min1 = .1 * maj1
cx1 = (mx(1) + mx(2)) / 2
cy1 = (my(1) + my(2)) / 2
EllipseTilt cx1, cy1, maj1, min1, ang1, &HFFFFFFFF
ang2
= _ATAN2(my
(3) - my
(4), mx
(3) - mx
(4)) maj2
= (_HYPOT(mx
(3) - mx
(4), my
(3) - my
(4))) / 2 min2 = .1 * maj2
cx2 = (mx(3) + mx(4)) / 2
cy2 = (my(3) + my(4)) / 2
EllipseTilt cx2, cy2, maj2, min2, ang2, &HFFFFFFFF
_PRINTSTRING (5, 5), "Sleeping, wake with click or keypress..." fTiltEllipse 0, cx2, cy2, maj2, min2, ang2, &H880000FF 'check trnasparency
fquad mx(1), my(1), mx(2), my(2), mx(3), my(3), mx(4), my(4), &H880000FF
fTiltEllipse 0, cx1, cy1, maj1, min1, ang1, &H88FFFF00
cSleep 45
pi = 0 'point index
'thanks STxAxTIC from Toolbox
' CX = center x coordinate
' CY = center y coordinate
' a = semimajor axis major radius
' b = semiminor axis minor radius
' ang = clockwise orientation of semimajor axis in radians (0 default)
' C = fill color
FOR k
= 0 TO 6.283185307179586 + .025 STEP .025 i = i + CX
j = -j + CY
'relace broken toolbax code
'this needs RotoZoom3 to rotate image BUT it can now scale it also!
'setup isolated area, draw fFlatEllipse and then RotoZoom the image into destination
'ox, oy is center of ellipse
'majorRadius is 1/2 the lonest axis
'minorRadius is 1/2 the short axis
'radianAngle is the Radian Angle of Tilt
'c is of course color
temp&
= _NEWIMAGE(2 * majorRadius
, 2 * minorRadius
, 32) fEllipse majorRadius, minorRadius, majorRadius, minorRadius, c
RotoZoom3 ox, oy, temp&, 1, 1, radianAngle
'modified 2019-12-15 _seamless added, rotation convert to radians
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(-radianRotation
): cosr!
= COS(-radianRotation
) x2& = (px(i&) * cosr! + sinr! * py(i&)) + X * xScale: y2& = (py(i&) * cosr! - px(i&) * sinr!) + Y * yScale
px(i&) = x2&: py(i&) = y2&
'this seems to work as well as any
scale = yRadius / xRadius
LINE (CX
, CY
- yRadius
)-(CX
, CY
+ yRadius
), c
, BF
y
= scale
* SQR(xRadius
* xRadius
- x
* x
) LINE (CX
+ x
, CY
- y
)-(CX
+ x
, CY
+ y
), c
, BF
LINE (CX
- x
, CY
- y
)-(CX
- x
, CY
+ y
), c
, BF
' found at [abandoned, outdated and now likely malicious qb64 dot net website - don’t go there]: http://www.[abandoned, outdated and now likely malicious qb64 dot net website - don’t go there]/forum/index.php?topic=14425.0
'2019-11-20 Steve saves some time with STATIC and saves and restores last dest
'need 4 non linear points (not all on 1 line) list them clockwise so x2, y2 is opposite of x4, y4
ftri x1, y1, x2, y2, x4, y4, K
ftri x3, y3, x2, y2, x4, y4, K
SUB cSleep
(secsWait
AS DOUBLE) 'wait for keypress or mouseclick, solves midnight problem nicely I think
wayt = 1
oldMouse
= _MOUSEBUTTON(1) ' <<< this is Steve's cool way to get clear of mouse click IF TIMER + 24 * 60 * 60 - startTime
> secsWait
THEN wayt
= 0