_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