Board logo

标题: [游戏娱乐] 二进制螺旋Binary spiral [打印本页]

作者: aa77dd@163.com    时间: 2016-9-24 00:55     标题: 二进制螺旋Binary spiral

本帖最后由 aa77dd@163.com 于 2016-9-24 01:08 编辑




第 36 行 变量 sumOfStream 的值越大, 运行效果就越接近 我贴的图, 即螺线在屏幕上铺得越满,  有 螺旋星系 的感觉, 但运行也就会越慢
  1. @echo off & title %~n0 & setlocal enabledelayedexpansion
  2. set "hexWid=50" & set "hexHei=3c" & REM 80,60
  3. for /f "tokens=2 delims=[]" %%a in ('ver') do for /f "tokens=2 delims=. " %%a in ("%%a") do set /a "FullScreen=-((%%a-6)>>31)"
  4. if "%1"=="" (
  5.   for %%a in (  FontSize:00080008
  6.                 FontFamily:00000030
  7.                 WindowSize:00%hexHei%00%hexWid%
  8.                 ScreenColors:0000000a
  9.                 CodePage:000001b5
  10.                 ScreenBufferSize:00%hexHei%00%hexWid%
  11.                 FullScreen:!FullScreen:-=!
  12.   ) do for /f "tokens=1,2 delims=:" %%b in ("%%a") do (
  13.     >nul reg add HKCU\Console\TheMatrix /v %%b /t reg_dword /d 0x%%c /f
  14.   )
  15.   start "TheMatrix" /max "%ComSpec%" /c %~s0 1 & exit
  16. ) else ( >nul reg delete HKCU\Console\TheMatrix /f )
  17. REM "Main Title/Trinity Infinity" – 3:54
  18. if exist "%~dp0matrix4.mp3" (
  19.     cd /d "%ProgramFiles%\Windows Media Player\"
  20.     start /min wmplayer.exe "%~dp0matrix4.mp3"
  21. ) else (
  22.     start /min  http://pisa.ucsd.edu/cse125/2001/cse190g1/matrix4.mp3
  23. )
  24. set "Path=%SystemRoot%\system32"
  25. for /f "delims==" %%a in ('set') do if /i "%%a" neq "Path" if /i "%%a" neq "hexHei" if /i "%%a" neq "hexWid" set "%%a="
  26. REM trigonometric function
  27. set "SIN=(t-t*t/1875*t/320000+t*t/1875*t/15625*t/16000*t/2560000-t*t/1875*t/15360*t/15625*t/15625*t/16000*t/44800000)"
  28. set "COS=(10000-t*t/20000+t*t/1875*t/15625*t/819200-t*t/1875*t/15360*t/15625*t/15625*t/10240000+t*t/1875*t/15360*t/15625*t/15625*t/16000*t/15625*t/229376000)"
  29. set /a "ZM=10000, p=31416, p2=62832, pn2=-62832, p#2=15708, p3#2=47124, p3#2_=p3#2-1, DEG=31416/180"
  30. set /a "wid=0x%hexWid%, hei=0x%hexHei%, iMax=wid*hei, XC = wid/2, YC = hei/2, sumOfStream=40"
  31. set /a buffwid              =   wid
  32. set /a linesWantBackAbove   =   hei - 1
  33. set /a "cntBS = 2 + (buffwid + 7) / 8 * linesWantBackAbove"
  34. set "TAB= "
  35. for /F %%a in ('"prompt $h&for %%b in (1) do rem"')do Set "BS=%%a"
  36. REM set "BS="
  37. set "BSs="
  38. for /L %%a in (1 1 !cntBS!) do set "BSs=!BSs!%BS%"
  39. set "aLineBS="
  40. for /L %%a in (1 1 !wid!) do set "aLineBS=!aLineBS!%BS%"
  41. set "scr="
  42. for /l %%i in (1 1 !iMax!) do set "scr= !scr!"
  43. for /l %%n in (1 1 !sumOfStream!) do set "TL%%n=0"
  44. set /a "DEG_unit=3, lineHeiMax = 360 / DEG_unit / 2"
  45. for /l %%* in () do (
  46.     for /l %%n in (1 1 !sumOfStream!) do (
  47.         if !TL%%n! leq 1 (
  48.             rem TL 总寿命结束, 重生   Rg 生长点位置; Rc 擦除点位置
  49.             set /a "H%%n=!random! %% (lineHeiMax-45)+45,}%%n=0,CL%%n=!random! %% (H%%n -40) + 41,TL%%n=CL%%n+H%%n,H%%n+=1, {%%n=!random! %% 360 * DEG, Rg%%n=}%%n,Rc%%n=}%%n"
  50.         )
  51.         REM 当 0 < H, grow=-1, 继续生长; 否则, grow=0, 停止生长
  52.         REM 当 CL < 1, old=-1, 开始擦除; 否则, old=0, 不擦除
  53.         REM 当 CL = 0, old0=-1, 擦除点位置=出生点位置; 否则, old0=0, 擦除点位置=擦除点位置, 不变
  54.         set /a "TL%%n-=1,CL%%n-=1,H%%n-=1,old=(CL%%n-1)>>31,grow=-H%%n>>31, old0=-^!CL%%n,Rc%%n=(old0&}%%n)|(~old0&Rc%%n)"
  55.         if !old! neq 0 (set "chrc= ") else set "chrc="
  56.         if !grow! neq 0 ( set /a "chrg= !random! & 1" ) else set "chrg="
  57.         for %%i in (g c) do if defined chr%%i (
  58.             REM 画生长点 或 擦除点
  59.             set /a "U%%i%%n={%%n + p2 + (R%%i%%n - }%%n) * DEG_unit*DEG, U%%i%%n %%= p2, U%%i%%n += U%%i%%n>>31&p2, t=U%%i%%n, s1=(t-p#2^t-p3#2)>>31, s3=p3#2_-t>>31, t=(-t&s1)+(t&~s1)+(p&s1)+(pn2&s3), SINt=%SIN%, t=%COS%, COSt=(-t&s1)+(t&~s1), x=(XC*ZM + R%%i%%n * COSt)/ZM, y=(YC*ZM + R%%i%%n * SINt)/ZM, inScr=(x-0^x-wid)&(y-0^y-hei)"
  60.             if !inScr! lss 0 (
  61.                 set /a "ind=x+y*wid+1, lenL=ind-1, lenR=iMax-ind"
  62.                 for /f "tokens=1,2,3" %%a in ("!lenL! !ind! !lenR!") do (set scr=!scr:~0,%%a!!chr%%i!!scr:~%%b,%%c!)
  63.             )
  64.             REM 生长点 或 擦除点变化到下一个位置
  65.             set /a "R%%i%%n+=1"
  66.         )
  67.     )
  68.     <nul set /p "=!aLineBS!" & (2>nul echo;%TAB%!BSs!) & <nul set /p "=%BS%"
  69.     <nul set /p "=%BS%!scr:~0,-1!"
  70. )
  71. exit
复制代码

作者: 523066680    时间: 2016-9-24 08:57

本帖最后由 523066680 于 2016-9-24 12:24 编辑

GL乱入,固定渲染管线|双缓冲



参考
罗马花椰菜与螺纹点阵, 费氏数列与黄金分割
作者: happy886rr    时间: 2016-9-24 10:52

不错,赞一个。就是感觉sin、cos什么的可以交给C代码计算。批处理算级数,既不能一次乘太多,也不能一次除太多,效率也是个问题。麦克劳林展开式可以用倍角迭代加速。用矩阵运算做个星云的3D旋转。
作者: happy886rr    时间: 2016-9-24 10:55

回复 2# 523066680
玩的真溜,GL估计还能做那种3D旋转的星尘,GDI+。exsyx也可以绘图。
作者: 523066680    时间: 2016-9-24 11:18

本帖最后由 523066680 于 2016-9-24 11:52 编辑

回复 4# happy886rr

    GL应该是比一般图形接口更好用的,特别是和显卡特性函数的对接。虽然听说这一两年DX的性能逐渐超越GL,
但是GL的移动端(OpenGL ES)和网页端(WebGL)越来越普及,我在学这门技能时也越来越有信心。

同一个sin函数,每列只有1个字符,视觉上却可以看到3条 或者 2条曲线在交错




作者: happy886rr    时间: 2016-9-24 12:52

回复 5# 523066680
溜啊,对波形的驾驭力强。几乎所有曲线都可以用傅里叶级数表示为正余弦函数,什么噪音处理了,图像复原,人脸识别,都离不开sin、cos。
作者: aa77dd@163.com    时间: 2016-9-24 12:54

本帖最后由 aa77dd@163.com 于 2016-9-24 13:15 编辑

回复 2# 523066680

批处理也乱入
  1. @echo off & setlocal enabledelayedexpansion
  2. set "TAB= " & for /F %%a in ('"prompt $h&for %%b in (1) do rem"')do Set "BS=%%a"
  3. set /a "ZM=10000, p=31416, p2=62832, pn2=-62832, p#2=15708, p3#2=47124, p3#2_=p3#2-1, DEG=31416/180"
  4. set "SIN=(t-t*t/1875*t/320000+t*t/1875*t/15625*t/16000*t/2560000-t*t/1875*t/15360*t/15625*t/15625*t/16000*t/44800000)"
  5. set "COS=(10000-t*t/20000+t*t/1875*t/15625*t/819200-t*t/1875*t/15360*t/15625*t/15625*t/10240000+t*t/1875*t/15360*t/15625*t/15625*t/16000*t/15625*t/229376000)"
  6. set /a "wid=75, hei=75, iMax=wid*hei, wid_div_2 = wid / 2 - 3"
  7. color 0c & mode !wid!,!hei!
  8. (for /l %%i in (1 1 !iMax!) do set "scr= !scr!") & set "emp=!scr!"
  9. set /a "buffwid = wid, linesWantBackAbove = hei - 1, cntBS = 2 + (buffwid + 7) / 8 * linesWantBackAbove"
  10. set "BSs=" & for /L %%a in (1 1 !cntBS!) do set "BSs=!BSs!%BS%"
  11. set "aLineBS=" & for /L %%a in (1 1 !wid!) do set "aLineBS=!aLineBS!%BS%"
  12. set /a "XC = wid/2, YC = hei/2, DEG_unit = 3, ddu=1, th0=!random! %% 360 * DEG"
  13. for /L %%i in (5000 -1 0) do (
  14.     set /a "th=th0+p2+DEG*%%i, DEG_unit+=ddu, DEG_unit= DEG_unit %% 360"
  15.    
  16.     for /l %%a in (0 1 !wid_div_2!) do (
  17.         set /a "th+=p2+DEG * DEG_unit, th %%= p2, th += th>>31&p2, t=th, s1=(t-p#2^t-p3#2)>>31, s3=p3#2_-t>>31, t=(-t&s1)+(t&~s1)+(p&s1)+(pn2&s3), SINt=%SIN%, t=%COS%, COSt=(-t&s1)+(t&~s1)"
  18.         set /a "r=%%a, x=(XC*10000 + r * COSt)/10000, y=(YC*10000 + r * SINt)/10000, inScr=(x-0^x-wid)&(y-0^y-hei)"
  19.         REM if !inScr! lss 0 (
  20.             set /a "ind=x+y*wid+1, lenL=ind-1, lenR=iMax-ind"
  21.             for /f "tokens=1,2,3" %%a in ("!lenL! !ind! !lenR!") do (set scr=!scr:~0,%%a!*!scr:~%%b,%%c!)
  22.         REM )
  23.     )
  24.     <nul set /p "=!aLineBS!" & (2>nul echo;%TAB%!BSs!) & <nul set /p "=%BS%"
  25.     <nul set /p "=%BS%!scr:~0,-1!" & set "scr=!emp!" & title %%i / 5000
  26. )
  27. >nul pause
  28. exit
复制代码

作者: 依山居    时间: 2016-9-24 15:04


羡慕嫉妒恨,只能静静看着你们装B。
作者: 523066680    时间: 2016-9-24 15:25

本帖最后由 523066680 于 2016-9-25 00:22 编辑

回复 8# 依山居


    我也很嫉妒的,决定回去慢慢结网。话说你python跑个图像很轻松啊
http://bbs.bathome.net/redirect.php?goto=findpost&ptid=15549&pid=102495
(以前照搬改写了一些教程,可惜烂尾了。以及,现在看以前的帖子,感觉 too young too naive

再贴一个三维旋转体




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2