*

\ compass

: 2pi 2 pi * ;
: atan2 atan2 2pi / 1 mod ;
: cos 2pi * cos ; : sin 2pi * sin ;

: orig ( X Y -- ) 1 ! 0 ! ;
: axis ( A -- ) 2 ! ;
: wscale ( WS -- ) 3 ! ; 1 3 !
: hscale ( HS -- ) 4 ! ; 1 4 !
: radius ( R -- ) 5 ! ; 1 5 !
: thickness ( T -- ) 2 / 6 ! ; .01 6 !
: Halo_degree ( H -- ) 7 ! ; 149 7 !

: t9 t 99 / sin .5 * .5 + 1 + ;
\ : x x .5 - t9 * 1 mod ;
\ : y y .5 - t9 * 1 mod ;
: x x 0 @ - 3 @ / ;
: y y 1 @ - 4 @ / ;

: r ( -- r ) y 2 ** x 2 ** + .5 ** ;
: a ( -- a ) y x atan2 2 @ - 1 mod ;
: x ( -- x ) r a cos * ;
: y ( -- y ) r a sin * ;

( \ rolling colors
.5 .5 orig ts axis
x .0 >
y .0 >
r .4 <
a 4 * .5 + 1 mod .2 **
\ ) \ rolling colors

: 原點 ( X Y -- ) orig ; : 軸向 ( A -- ) axis ; : 半徑 ( R -- ) radius ;
: 橫向放大 ( WS -- ) wscale ; : 縱向放大 ( HS -- ) hscale ;
: 線徑 ( T -- ) thickness ; : 暈度 ( H -- ) Halo_degree ;
: 絕對值 ( n -- n的絕對值 ) abs ; : 反圖 ( 圖 -- 反圖 ) 1 min 0 max 1 swap - ;
: 等值線 ( f y -- 線 ) - 絕對值 6 @ < ; : 等值暈 ( f y -- 線 ) - 絕對值 反圖 7 @ ** ;

: 橫線 ( Y -- 線 ) y 等值暈 ; : 垂線 ( X -- 線 ) x 等值暈 ; :( R -- 圈 ) r 等值暈 ; : 點 0 圈 ; :( R -- 圓 ) r > ;
: 線 0 橫線 ; : 向線 ( R -- 向線 ) 圓 0 橫線 x 0 > * * ; : 垂向線 ( R -- 向線 ) 圓 0 垂線 y 0 > * * ;
: 兩點線 ( X1 Y1 X2 Y2 -- 線段 )
>r >r ( X1 Y1 ) 原點
r> 0 @ - r> 1 @ - ( X2-X1 Y2-Y1 )
swap atan2 軸向 線
;

: t1 t 10 / ; : t6 t 60 / negate ;

.4 .4 原點

t6 軸向 .00 垂線 線 +
t1 軸向 .20 向線 + .20 垂向線 +
.2 圈 +
.2 圓 dup >r .1 * +
.2 1.2 **

.6 .6 原點
t6 軸向 .00 垂線 線 +
t1 軸向 .30 向線 + .30 垂向線 +
.3 圈 +
.3 1.2 **

.3 圓 dup >r .1 * + r> r> + .3 *
.4 .4 .6 .6 兩點線 +
0 0 原點 x y + *

r .2 **
\ ) \ compass