REBOL [ title: "vector Lion demo by Cyphre in 2004" author: cyphre@seznam.cz note: { the lion picture vector data were take from Lion demo at http://www.antigrain.com } ] lion: do decompress 64#{ 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 ziNg3nxjpMatQtJo5iTPezQc9Jpi/2XGWJ7e8oSuKgf5cZiFJ9PXSTaNRJfv0yh9 Me2ot7/1H/TRaDWaI0/Gt7qF5uy44DjjvaCk/q3/oI9GA7yiX0TZw4BycW6x/Ay5 aTX+Ukl6gF1feqqupVmtwH7SReMykXGjqHSS31Q3Xt3wPHW/Kpw75cE4DBCLEXWf 9C8grsx93xoefqf+vePUpR6hiMAaH/QH9ha6zd+pw5N8V5J37hxzGfb8plMyptNg pnNy4pLesE+uOwlVqDfJ1Mz4Fxe2fhVP2PrTK1txAKwiLzDq+rVHcv99QFbputs8 DApI8CcTRQnIGzN9b/cVjYdVnGg6DC1M3wAVaW7M35G0b0d38oOZFhumytutb/sR NnjJpMu3eJYSiFlqJt0XWimbYAsN5+1O26o7BRrlxF0m3Q3/GRawFe0heFKcFg4I x8ywSXEWsG/C0olh21Xsr0z0bNDNf96HB6vqrz9ko2BKFq8aaPMdpJjXQR4HLUX6 37LDSp+t1khGj+fD15MVLlTiZVi1nFGNvxVBZRi30JyEur9/vqDbrvaf1IioNRHO kO/OMc6WpCVivtV/nUXvi6/6yOtjObVImve1Zdn9DDZc8QWFTbvvJTEcynZXd65C 5AbqzyKseD4dTlUK3L7yHbbvYOjPJdTvOj3oX9yoXreE6urFYOC6XyBmvdU76WNn Ihu7x9+xoZLvvt4vXTJCh4z4w0mf+if9TaTWtVH+ARiGgilr7LtN34ehNknpU/NO /uXf/w/YKmjNr0oAAA== } angle: func [ "Handy function which returns angle of given point" x y /local result ][ result: either x = 0 [ either y < 0 [-90][90] ][ arctangent y / x ] if x < 0 [result: result + 180] return result ] make-draw: func [ pos block zoom rotation rot-center /local result p r ang ][ result: copy [] zoom: zoom / 100 parse block [ some [ set p pair! ( p: p - rot-center r: square-root ((power p/x 2) + (power p/y 2)) ang: rotation + angle p/x p/y insert tail result (as-pair r * (cosine ang) r * (sine ang)) * zoom + pos ) | set p integer! (insert tail result to-integer p) | set p skip (insert tail result p) ] ] return result ] scr-size: 400x400 view/new layout [ origin 0x0 b: box white scr-size with [ rate: 0 rot: 0 zoom: 100 dz: -1 pos: scr-size / 2 effect: compose/deep [draw [transform 0 200x200 1 1 0x0 (make-draw pos lion zoom rot 100x200)]] time: now/precise frames: 0 ] fps: text "000000" ] forever bind [ rot: rot + 1 zoom: zoom + dz if any [zoom < 1 zoom > 100] [dz: negate dz] effect/2/2: rot effect/2/4: effect/2/5: zoom / 100 show self frames: frames + 1 if frames // 100 = 0 [ fps/text: form frames / to decimal! difference now/precise time show fps ] ] b