xorig = 0
yorig = 0
CALL cline
(xorig
, yorig
, xorig
+ _WIDTH, yorig
, 8) CALL cline
(xorig
, yorig
, xorig
+ -_WIDTH, yorig
, 8)
xzoom = 20
yzoom = 20
' Initialize line
b = -2
d = 2
lineang = .1
m = vy / vx
' Initialize ellipse
x0 = 2
y0 = -2
ellipsearg = .2
amag = 10
ax
= amag
* COS(ellipsearg
)ay
= amag
* SIN(ellipsearg
)bmag = 5
bx
= bmag
* COS(ellipsearg
+ 3.14 / 2)by
= bmag
* SIN(ellipsearg
+ 3.14 / 2)
lineang = lineang + .01
m = vy / vx
lineang = lineang - .01
m = vy / vx
bmag = bmag + .1
bx
= bmag
* COS(ellipsearg
+ 3.14 / 2) by
= bmag
* SIN(ellipsearg
+ 3.14 / 2) bmag = bmag - .1
bx
= bmag
* COS(ellipsearg
+ 3.14 / 2) by
= bmag
* SIN(ellipsearg
+ 3.14 / 2) ellipsearg = ellipsearg - .1
ax
= amag
* COS(ellipsearg
) ay
= amag
* SIN(ellipsearg
) bx
= bmag
* COS(ellipsearg
+ 3.14 / 2) by
= bmag
* SIN(ellipsearg
+ 3.14 / 2) ellipsearg = ellipsearg + .1
ax
= amag
* COS(ellipsearg
) ay
= amag
* SIN(ellipsearg
) bx
= bmag
* COS(ellipsearg
+ 3.14 / 2) by
= bmag
* SIN(ellipsearg
+ 3.14 / 2)
' Intersections
a2 = ax ^ 2 + ay ^ 2
b2 = bx ^ 2 + by ^ 2
av = ax * vx + ay * vy
bv = bx * vx + by * vy
rbx = d - x0
rby = b - y0
adbr = ax * rbx + ay * rby
bdbr = bx * rbx + by * rby
aa = av ^ 2 / a2 ^ 2 + bv ^ 2 / b2 ^ 2
bb = 2 * (av * adbr / a2 ^ 2 + bv * bdbr / b2 ^ 2)
cc = adbr ^ 2 / a2 ^ 2 + bdbr ^ 2 / b2 ^ 2 - 1
arg = bb ^ 2 - 4 * aa * cc
alpha1
= (-bb
+ SQR(arg
)) / (2 * aa
) alpha2
= (-bb
- SQR(arg
)) / (2 * aa
) x1 = alpha1 * vx + d
x2 = alpha2 * vx + d
y1 = alpha1 * vy + b
y2 = alpha2 * vy + b
x1 = -999
y1 = -999
x2 = -999
y2 = -999
draweverything:
LOCATE 1, 1:
PRINT "LClick=Move ellipse, RClick=Move line, Scroll=Tilt line, Arrows=Shift ellipse" x = alpha * vx + d
y = alpha * vy + b
CALL ccircle
(xorig
+ x
* xzoom
, yorig
+ y
* yzoom
, 1, 1) x
= x0
+ ax
* COS(t
) + bx
* SIN(t
) y
= y0
+ ay
* COS(t
) + by
* SIN(t
) CALL ccircle
(xorig
+ x
* xzoom
, yorig
+ y
* yzoom
, 1, 4) CALL ccircle
(xorig
+ x1
* xzoom
, yorig
+ y1
* yzoom
, 10, 1) CALL ccircle
(xorig
+ x2
* xzoom
, yorig
+ y2
* yzoom
, 10, 1)
SUB cline
(x1
, y1
, x2
, y2
, col
)
SUB ccircle
(x1
, y1
, r
, col
)