Page 1 of 1
Fractal: Dragon curve
Posted: 14 Apr 2017 01:42
by neorobin
Please replace the ★ in code by a real TAB (ASCII 0x09). Tested only on WIN7 64bit
Code: Select all
%1 @goto :initCON
@echo off & setlocal enabledelayedexpansion
call :clearVars
set /a "w=100,h=68, h1=h+0,t=w*h,xc=w/2+1,yc=h/2"
set "TAB=★" & for /F %%a in ('"prompt $h&for %%b in (1) do rem"')do Set "BS=%%a"
set /a "buffwid = w, linesWantBackAbove = h + 1 - 1, cntBS = 2 + (buffwid + 7) / 8 * linesWantBackAbove"
set "BSs=" & for /L %%a in (1 1 !cntBS!) do set "BSs=!BSs!%BS%"
set "aLineBS=" & for /L %%a in (1 1 !w!) do set "aLineBS=!aLineBS!%BS%"
mode %w%,%h1%
for /l %%i in (1 1 !t!) do set "s=!s! "
set "xv=-1" & set "yv=0 "
set "pttn=.@.@.@.@.@.@.@."
REM init curve
set /a "x=xinit=28, y=yinit=-10, length=1, len2=(length-1) * 2"
set /a "i=x-xc + (y-yc) * w + 1, L=i-1"
for /f "tokens=1,2" %%a in ("!L! !i!") do (set s=!s:~0,%%a!!pttn:~0,1!!s:~%%b!)
for /L %%L in (0 2 !len2!) do (
set /a "x += !xv:~%%L,2!, y += !yv:~%%L,2!"
set /a "i=x-xc + (y-yc) * w + 1, L=i-1"
for /f "tokens=1,2" %%a in ("!L! !i!") do (set s=!s:~0,%%a!!pttn:~0,1!!s:~%%b!)
)
set "pttn=!pttn:~1!"
call :f !xinit! !yinit! !length! s xv yv
title complete & >nul pause &exit
:f xtail ytail length s xv yv
REM setlocal
if %3 lss 4096 (
set "vxr=" & set "vyr="
set /a "x=%1, y=%2, len2=(%3 - 1) * 2, nextLength=%3 * 2"
for /L %%L in (0 2 !len2!) do (
set /a "xn = - !yv:~%%L,2!, yn = !xv:~%%L,2!"
set /a "x += -xn, y += -yn" & rem xn,yn get the vector rotate 90deg, and then mltiply by -1
set /a "i=x-xc + (y-yc) * w + 1, L=i-1, inScr=(x-(-w/2+1)^x-(w/2+1))&(y-(-h/2+1)^y-(h/2+1))"
if !inScr! lss 0 (
for /f "tokens=1,2" %%a in ("!L! !i!") do (set s=!s:~0,%%a!!pttn:~0,1!!s:~%%b!)
<nul set /p "=!aLineBS!" & (2>nul echo;%TAB%!BSs!) & <nul set /p "=%BS%"
<nul set /p "=%BS%!s:~0,-1!"
)
set "xn= !xn!" & set "yn= !yn!"
set "vxr=!xn:~-2!!vxr!" & set "vyr=!yn:~-2!!vyr!"
)
set "pttn=!pttn:~1!"
set "xv=!vxr!!xv!" & set "yv=!vyr!!yv!"
call :f !x! !y! !nextLength! %4 %5 %6
)
exit /b
:initCON
@echo off
for %%a in ( FontSize:00080008 FontFamily:00000030 WindowSize:00C800C8
ScreenColors:0000000f CodePage:000001b5 ScreenBufferSize:00C800C8
) do for /f "tokens=1,2 delims=:" %%b in ("%%a") do (
>nul reg add HKCU\Console\Dragon_curve /v %%b /t reg_dword /d 0x%%c /f
)
start "Dragon_curve" /max "%ComSpec%" /c "%~0" REM & (call :delReg) & exit
REM end of :initCON
exit /b
:clearVars
set "Path=%SystemRoot%\system32"
for /f "delims==" %%a in ('set') do (
if /i "%%a" neq "Path" set "%%a="
)
exit /b
REM end of :clearVars
:delReg
setlocal enabledelayedexpansion
set "s=!time:~-4,1!"
:delReg.loop
set /a "elapse = (1!time:~-4,1! - s) %% 10"
if %elapse% lss 2 goto :delReg.loop
>nul reg delete HKCU\Console\Dragon_curve /f
endlocal
exit /b
REM end of :delReg
Re: Fractal: Dragon curve
Posted: 14 Apr 2017 10:16
by einstein1969
Hi neorobin,
I have tested on italian windows 7 32bit and work well.
einstein1969
Re: Fractal: Dragon curve
Posted: 14 Apr 2017 10:46
by neorobin
Hi, einstein1969
OK!
Thanks for your attention and feedback.
Re: Fractal: Dragon curve
Posted: 14 Apr 2017 21:22
by Ed Dyreen
cool, which program did you use to capture the animation in a gif ?
Re: Fractal: Dragon curve
Posted: 14 Apr 2017 21:35
by neorobin
Re: Fractal: Dragon curve
Posted: 14 Apr 2017 23:55
by Sounak@9434
@neorobin:
Tested and working beautifully on windows 8.1 32bit(x86)
Re: Fractal: Dragon curve
Posted: 15 Apr 2017 03:04
by neorobin
re: Sounak@9434
Thanks for your feedback!
Re: Fractal: Dragon curve
Posted: 15 Apr 2017 13:35
by Ed Dyreen
great, thanks neorobin
ps; tested successfully on windows eXperience professional
ps; you can create an executable from it using bat2exe and then rename the exe to scr and you have a screensaver
Re: Fractal: Dragon curve
Posted: 16 Apr 2017 21:58
by Aacini
Tested successfully on Windows 8.1 Spanish, both 32 and 64 bits.
I reviewed the code and I think it is somewhat convoluted and with not enough descriptive comments, and it have multiple jumps that just makes it even less clear. I tried to understand the factors that makes it to select between "@" and "." in the drawing, and also to modify the recursive level and/or the graph coordinates, but that is a hard work... IMHO this type of code is not useful for others that may want to understand it and then modify it.
I developed my own version of a Dragon fractal curve drawing Batch program. I used my
Turtle Graphics engine for Batch files and just changed the drawing example code section:
Code: Select all
:TurtleGraphics
rem Start of drawing commands
call :newwindow "Batch Turtle Graphics" 400 400
:nextCommand
echo/
echo Ready...
set "command="
set /P "command="
if not defined command goto endCommands
%command%
goto nextCommand
:endCommands
rem End of drawing commands
goto :EOF
... by the Dragon Curve drawing code, that is this one:
Code: Select all
:TurtleGraphics
rem Start of drawing commands
Title Drawing of Dragon Curve
rem The method used here is the one described just before Gray Code Method at:
rem https://en.wikipedia.org/wiki/Dragon_curve#Gray_code_method
set /A horSize=800, unit=horSize/10, verSize=unit*6, lineLen=unit*6, horPos=unit*23/10, verPos=unit, startAngle=45, adj=0
cls
echo/
echo Select this window and
for /L %%n in (1,1,14) do (
set /P "=Press any key to draw the next level . . ." < NUL
pause > NUL
rem The adjustment in lineLen was tuned for a horSize of 800 pixels:
if %%n lss 9 (set /A adj+=4) else if %%n equ 9 (set /A adj+=1) else if %%n equ 13 set /A adj-=2
set /A "segments=1<<%%n, segLen=lineLen/%%n-adj"
if %%n equ 1 set /A segLen=segLen*10/15
echo/
echo Drawing level %%n . . .
call :newWindow "Dragon Curve - Level %%n: draw !segments! segments of !segLen! pixels" %horSize% %verSize%
call :setxy -%horPos% -%verPos%
call :right !startAngle!
set /A "startAngle=(startAngle-45)%%360"
for /L %%n in (1,1,!segments!) do (
call :penDown
call :forward !segLen!
set /A "angle=((-2*^!^!(((%%n&-%%n)<<1)&%%n))+1)*90"
call :right !angle!
call :penUp
)
)
pause
rem End of drawing commands
goto :EOF
The result is pretty good:
Antonio
Re: Fractal: Dragon curve
Posted: 17 Apr 2017 01:48
by neorobin
Thanks, Ed Dyreen
But Win7 and after systems seems to be no full-screen feature
Re: Fractal: Dragon curve
Posted: 17 Apr 2017 01:54
by neorobin
@Aacini, thank you for your attention and feedback.
I wrote a version with simple algorithm explain.
There is a good algorithm explain here:
https://en.wikipedia.org/wiki/Dragon_curveMy algorithmic description version is just for my batch implementation code.
The first 9 turns curves and vectors results:
Code: Select all
TURN 1
vector_x=-1
vector_y=0
The tail position: (0, 0)
H.+
TURN 2
vector_x_prev=-1
vector_y_prev=0
vector_x_reverse= 0
vector_y_reverse=-1
vector_x= 0-1
vector_y=-10
The tail position: (0, 2)
H.+
.
T
TURN 3
vector_x_prev= 0-1
vector_y_prev=-10
vector_x_reverse= 0 1
vector_y_reverse=-1 0
vector_x= 0 1 0-1
vector_y=-1 0-10
The tail position: (-2, 4)
H.+
.
..O
.
T
TURN 4
vector_x_prev= 0 1 0-1
vector_y_prev=-1 0-10
vector_x_reverse= 0 1 0 1
vector_y_reverse=-1 0 1 0
vector_x= 0 1 0 1 0 1 0-1
vector_y=-1 0 1 0-1 0-10
The tail position: (-6, 4)
H.+
.
... ...
. . .
T ..O
TURN 5
vector_x_prev= 0 1 0 1 0 1 0-1
vector_y_prev=-1 0 1 0-1 0-10
vector_x_reverse= 0 1 0 1 0-1 0 1
vector_y_reverse=-1 0 1 0 1 0 1 0
vector_x= 0 1 0 1 0-1 0 1 0 1 0 1 0 1 0-1
vector_y=-1 0 1 0 1 0 1 0-1 0 1 0-1 0-10
The tail position: (-10, 0)
...
. .
T ... H.+
. .
..... ...
. . . .
..O ...
TURN 6
vector_x_prev= 0 1 0 1 0-1 0 1 0 1 0 1 0 1 0-1
vector_y_prev=-1 0 1 0 1 0 1 0-1 0 1 0-1 0-10
vector_x_reverse= 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1
vector_y_reverse=-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0
vector_x= 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0 1 0-1
vector_y=-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0 1 0-1 0-10
The tail position: (-10, -8)
...
. .
T ...
.
...
.
.....
. . .
.......
. . .
..O ... H.+
. .
..... ...
. . . .
... ...
TURN 7
vector_x_prev= 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0 1 0-1
vector_y_prev=-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0 1 0-1 0-10
vector_x_reverse= 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1
vector_y_reverse=-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0
vector_x= 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0 1 0 1 0-1 0 1 0-
1 0-1 0-1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0 1 0-1
vector_y=-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0-1 0 1 0 1 0 1 0 1
0-1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0 1 0-1 0-10
The tail position: (-2, -16)
...
. .
T ...
.
...
.
... ... .....
. . . . . . .
........... ...
. . . . .
..O .......
. . .
... ...
.
.....
. . .
.......
. . .
... ... H.+
. .
..... ...
. . . .
... ...
TURN 8
vector_x_prev= 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0 1 0 1 0-1 0 1 0-
1 0-1 0-1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0 1 0-1
vector_y_prev=-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0-1 0 1 0 1 0 1 0 1
0-1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0 1 0-1 0-10
vector_x_reverse= 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0
1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1
vector_y_reverse=-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0-1
0 1 0-1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0
vector_x= 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0
1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0-1 0-
1 0-1 0 1 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0 1 0-1
vector_y=-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0-1
0 1 0-1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0 1 0-1
0 1 0 1 0-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0 1 0-1 0-10
The tail position: (14, -16)
... ...
. . . .
......... ...
. . . . . .
..O ..... ... T ...
. . . . .
......... ...
. . . . .
... ... ........... ... .....
. . . . . . . . . . . . . . .
........... ....... ....... ...
. . . . . . . . .
... ....... ..... .....
. . . . . . .
... ... ... ...
.
.....
. . .
.......
. . .
... ... H.+
. .
..... ...
. . . .
... ...
TURN 9
vector_x_prev= 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0
1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0-1 0-
1 0-1 0 1 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0 1 0-1
vector_y_prev=-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0-1
0 1 0-1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0 1 0-1
0 1 0 1 0-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0 1 0-1 0-10
vector_x_reverse= 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0
1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0 1 0 1 0 1 0-1 0 1 0 1 0-1 0 1 0 1 0
1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1
vector_y_reverse=-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0-1
0 1 0-1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0-1 0 1 0-1 0-1 0-1 0 1 0 1 0 1 0-1 0 1
0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0
vector_x= 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0
1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0 1 0 1 0 1 0-1 0 1 0 1 0-1 0 1 0 1 0
1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0 1 0 1 0-1 0 1 0-1 0-1 0-
1 0 1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0
1 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0 1 0 1 0-1 0 1 0-1 0-1 0-1 0 1 0
1 0 1 0-1 0 1 0 1 0 1 0 1 0-1
vector_y=-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0-1
0 1 0-1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0-1 0 1 0-1 0-1 0-1 0 1 0 1 0 1 0-1 0 1
0-1 0-1 0 1 0-1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0-1 0 1 0 1 0 1 0 1 0-1 0 1
0 1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0-1 0 1 0-1 0-1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1
0-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0 1 0-1 0-1 0-1 0 1 0-1 0 1 0 1 0-1 0 1 0 1 0 1 0 1 0-1 0 1 0 1 0-1
0 1 0 1 0 1 0-1 0 1 0-1 0-10
The tail position: (30, 0)
... ... ... ...
. . . . . . . .
......... .........
. . . . . . . .
... ..... ... ..O ..... ...
. . . . . . . .
......... .........
. . . . . . . .
... ... ........... ... .........
. . . . . . . . . . . . . . . .
........... ....... .............
. . . . . . . . . . . .
... ....... ..... ........... ...
. . . . . . . . . . . .
... ... ... ...............
. . . . . . . .
..... .............
. . . . . . . .
....... ..... ..... ...
. . . . . . . .
... ... H.+ ..... ... ... T ...
. . . . . . . .
..... ... ... ....... ...
. . . . . . . .
... ... ....... ... .....
. . . . . . . .
..... ....... ...
. . . .
..... .....
. . . .
... ...
Code: Select all
:: Dragon curve algorithmic description, neorobin @ 20170417_152348
:: This is an algorithmic description version, you can observe the changes of the variables and graphics to understand the details of the algorithm.
:: The point that is painted by the character "O" is the center of rotation;
:: The point that is painted by the character "+" is the coordinate system origin;
:: The point that is painted by the character "H" is the head of curve;
:: The point that is painted by the character "T" is the tail of curve;
:: algorithm explain here: https://en.wikipedia.org/wiki/Dragon_curve
%1 @goto :initCON & rem Set the fontsize of the console
@echo off & setlocal enabledelayedexpansion
REM Initialize the screen panel settings
set /a "w = 100, h = 68, h1 = h + 9999, size = w * h, xc = w / 2 + 1, yc = h / 2"
mode %w%,%h1%
for /l %%i in (1 1 !size!) do set "s=!s! "
set "body_char=."
REM Draw the initial most basic and simple dragon curve -- a short straight line
set "vector_x=-1"
set "vector_y=0 "
echo;vector_x=!vector_x!
echo;vector_y=!vector_y!
set /a "x = xInit = 0, y = yInit = 0, length = 1, len2 = (length - 1) * 2"
REM The tail
call :setPixel !x! !y! T
for /L %%L in (0 2 !len2!) do (
for %%a in (1 2) do ( rem The length of each basic line segment is 2
set /a "x += !vector_x:~%%L,2!, y += !vector_y:~%%L,2!"
call :setPixel !x! !y! !body_char!
)
)
REM The head
call :setPixel !x! !y! H
call :setPixel 0 0 + & rem Mark the coordinate system origin
echo; & echo;The tail position: (!xInit!, !yInit!^)
echo;!s!
pause
call :f !xInit! !yInit! !length! s vector_x vector_y
echo;complete, any key to exit... & >nul pause &exit
:f xtail ytail length screen_var vector_x vector_y
if %3 lss 2048 (
REM The point that is painted by the letter "O" is the center of rotation
set "s=!s:O=%body_char%!"
set "s=!s:T=O!"
set "vector_x_reverse="
set "vector_y_reverse="
set /a "x = %1, y = %2, len2 = (length-1) * 2"
for /L %%L in (0 2 !len2!) do (
REM Rotate 90 degrees and reverse
set /a "x_step = - !vector_y:~%%L,2!, y_step = !vector_x:~%%L,2!"
REM Draw The result of the prev curve rotate 90 degrees transformation
for %%a in (1 2) do (
set /a "x += -x_step, y += -y_step"
call :setPixel !x! !y! !body_char!
)
REM Vectors reverse assembly, save to vector_x_reverse and vector_y_reverse
set "x_step= !x_step!"
set "y_step= !y_step!"
set "vector_x_reverse=!x_step:~-2!!vector_x_reverse!"
set "vector_y_reverse=!y_step:~-2!!vector_y_reverse!"
)
REM The tail
call :setPixel !x! !y! T
set "vector_x_prev=!vector_x!"
set "vector_y_prev=!vector_y!"
REM Assemble vector_x_reverse, vector_y_reverse to the front of the previous curve vectors
set "vector_x=!vector_x_reverse!!vector_x!"
set "vector_y=!vector_y_reverse!!vector_y!"
echo; vector_x_prev=!vector_x_prev!
echo; vector_y_prev=!vector_y_prev!
echo;
echo;vector_x_reverse=!vector_x_reverse!
echo;vector_y_reverse=!vector_y_reverse!
echo;
echo; vector_x=!vector_x!
echo; vector_y=!vector_y!
echo; & echo;The tail position: (!x!, !y!^)
call :setPixel 0 0 + & rem Mark the coordinate system origin
echo;!s!
pause
REM The next turn curve total lenth is twice this turn
set /a "length *= 2"
call :f !x! !y! !length! %4 %5 %6
)
exit /b
:setPixel x y char
set /a "i = %1-xc + (%2-yc) * w + 1, L = i-1, inScr = (x-(-w/2+1)^x-(w/2+1))&(y-(-h/2+1)^y-(h/2+1))"
if !inScr! lss 0 (
for /f "tokens=1,2" %%a in ("!L! !i!") do (set s=!s:~0,%%a!%3!s:~%%b!)
)
exit /b
:initCON
@echo off
for %%a in ( FontSize:00080008 FontFamily:00000030 WindowSize:00C800C8
ScreenColors:0000000f CodePage:000001b5 ScreenBufferSize:00C800C8
) do for /f "tokens=1,2 delims=:" %%b in ("%%a") do (
>nul reg add HKCU\Console\Dragon_curve /v %%b /t reg_dword /d 0x%%c /f
)
start "Dragon_curve" /max "%ComSpec%" /c "%~0" REM & exit
exit /b
Re: Fractal: Dragon curve
Posted: 17 Apr 2017 13:44
by einstein1969
@neorobin
Have you tested the echo;%TAB%!BSs! with the "findstr colors"?
Re: Fractal: Dragon curve
Posted: 17 Apr 2017 23:53
by neorobin
@einstein1969
I did a test to achieve the purpose of the cursor feed back multiple lines.
But I can not find a way to do cursor feed back and color output at the same time.
Code: Select all
@echo off
mode 15
for /L %%i in (1 1 5) do echo;Line %%i
REM The content of file @test is one TAB followed 10 BS, no other any more charactors.
findstr /A:0a . @test*
>nul pause
The output( the underline is the cursor position ):
Line 1
Line 2
Line 3
Line 4 _
Line 5
@test: