! Copyright (C) 2013 Your name. ! See http://factorcode.org/license.txt for BSD license. USING: arrays kernel locals math prettyprint sequences ; IN: dragon :: zig ( p1 p2 -- p3 ) p1 first2 :> ( x1 y1 ) p2 first2 :> ( x2 y2 ) x1 x2 + y1 y2 - + 2 / ! (x1+x2+y1-y2)/2 x2 x1 - y1 y2 + + 2 / ! (x2-x1+y1+y2)/2 2array ; :: zag ( p1 p2 -- p3 ) p1 first2 :> ( x1 y1 ) p2 first2 :> ( x2 y2 ) x1 x2 + y1 y2 + - 2 / ! (x1+x2-y1+y2)/2 x1 x2 - y1 y2 + + 2 / ! (x1-x2+y1+y2)/2 2array ; :: (dragon) ( p1 p2 p3 d -- seq ) d 0 = [ p1 p2 2array ] [ p1 p1 p2 zig p2 d 1 - (dragon) p2 p2 p3 zig p3 d 1 - (dragon) append ] if ; :: dragon ( -- ) { 100 100 } :> p1 { 356 100 } :> p2 p1 p1 p2 zig p2 3 (dragon) . ; MAIN: dragon