Pure dos batch.


einstein1969

Active member
VIP
Local time
1:24 AM
Posts
100
OS
Windows 11 10.0.22000
Hi to all,

this work on windows 10. Can you try if it also works on windows 11?

Batch:
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off & setlocal EnableDelayedExpansion

    :: Porting By Francesco Poscetti aka einstein1969

    :: Use raster font 8x8, save in utf8

    :: v 0.0.3     update sin code, use vt100, auto tune number of points, use bullet ·
    ::        code optimization for faster execution, dinamic resolution based on pc performance
    ::        better zbuffer, break near infinite loop by jeb.
    :: v 0.0.2     passed from 16.6 FPS to ~20.0 FPS

    :: Variables enigma:

    :: _R   =   Sphere radius
    :: rt   =   Rotation angle
    :: ds   =   Distance Z of sphere
    :: _dx,_dy   =   Offset x,y of projecting coordinates in 2D plane.
    :: sx,cx   =   Sine, cosine of rotation angle
    :: a,b,c   =   Rotation coordinate 3D
    :: a,b   =   X,Y coordinate of projecting 3D to 2D
    :: c   =   Z coordinate

    :: Ref:
    :: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
    :: https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  title Sphere 3D
  set /a _cols=120, _lines=90
  rem utf 8
  chcp 65001
  mode %_cols%,%_lines%
  set /a _cols-=2, _lines-=2
  cls
  for /F %%a in ('Echo(prompt $E^| cmd') Do Set _ESC=%%a

:ChoiceLabel
  echo(
  choice /M "Select the maximum speed. Choose a number between 2 and 9 where 2 very fast and 9 slow. Default [5] ?" /D 5 /C 23456789 /T 10 /N
  if %errorlevel% gtr 0 (set /a _dT=%errorlevel%+1) else goto :ChoiceLabel

  :: Hide the cursor
  <nul set /p "=%_ESC%[?25l"
( 
  for /F "Tokens=1 delims==" %%v in ('set') do set "%%v="
  set /a "_cols=%_cols%, _lines=%_lines%"
  set "_ESC=%_ESC%"
  set "_dT=%_dT%"
)

  rem https://www.dostips.com/forum/viewtopic.php?f=3&t=4896
  set "_SIN(x)=(a=((x)%%62832)+(((x)%%62832)>>31&62832), b=(a-15708^a-47124)>>31,a=(-a&b)+(a&~b)+(31416&b)+(-62832&(47123-a>>31)),a-a*a/1875*a/320000+a*a/1875*a/15625*a/16000*a/2560000-a*a/1875*a/15360*a/15625*a/15625*a/16000*a/44800000)"

  set "_loop=FOR /L %%# in (1,1,2) do "
  %_loop%%_loop% set "_loop=!_loop!!_loop!!_loop!"

:: Main

  set /a "_R=160, _dx=_cols/2, _dy=_lines/2, _dz=4000, _ndx=6, ds=0, rt=0, i=1"

  for /L %%L in () do (

    %= Prepare for faster dinamic execution =%

    set /a "_ndy=_ndx/2, _stepx=62832/_ndx, _stepy=31416/_ndy"

    %= rainbow colors =%
    set /a H=0, dH=359/_ndx, V=10000

    for /L %%C in (1,1,!_ndx!) do (

      set /a "mm = (H*10000/60 %% 20000) - 10000, mm=(mm>>31|1)*mm, C = V, X = C *(10000 - mm)/10000, C=C*255/10000, X=X*255/10000"
      if !H! lss 60 (set /a R=C, G=X, B=0) else (
           if !H! lss 120 (set /a R=X, G=C, B=0) else (
            if !H! lss 180 (set /a R=0, G=C, B=X) else (
                if !H! lss 240 (set /a R=0, G=X, B=C) else (
                    if !H! lss 300 (set /a R=X, G=0, B=C) else (
                        if !H! lss 360 (set /a R=C, G=0, B=X) else (echo ERROR!)
      )))))
      %= compute for 216 color map =%
          set /A "C_%%C=((R-35)/40+((R-48)>>8)-((R-75)>>8))*36 + ((G-35)/40+((G-48)>>8)-((G-75)>>8))*6 + ((B-35)/40+((B-48)>>8)-((B-75)>>8)) + 16"
      set /A H+=dH
    )
    %= Empty vars =%
    set "X=" & set "V=" & set "G=" & set "R=" & set "C=" & set "B=" & set "mm=" & set "dH=" & set "H="

    %= meridians =%   
    set /a "angle=0"   
    set "_X="
    for /L %%X in (1,1,!_ndx!) do (
        set /A "sx=%_SIN(x):x=angle%, cx=%_SIN(x):x=(15708-angle)%, angle+=_stepx"
        set "_X=!_X!"!sx! !cx!" "
    )

    %= parallels =%
    set /a "angle=_stepy"
    set "_Y="
    for /L %%X in (2,1,!_ndy!) do (   
        set /A "sx=%_SIN(x):x=angle%, cx=%_SIN(x):x=(15708-angle)%, angle+=_stepy"
        set "_Y=!_Y!"!sx! !cx!" "   
    )
    set "angle="

    %= Poles 0-pi =%
    set /A "sx=%_SIN(x):x=0%, cx=%_SIN(x):x=(15708)%"
    set "_PX="!sx! !cx!""
    set "_PY="!sx! !cx!" "
    set /A "sx=%_SIN(x):x=31416%, cx=%_SIN(x):x=(15708-31416)%"
    set "_PY=!_PY!"!sx! !cx!""

    call :rotate
    
    set /a _ndx+=2
  )

goto :eof

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:rotate

(setlocal

  for /F "Tokens=1 delims==" %%v in ('set _') do set "%%v="

  %= clear screen and Home =%
  set/p "=%_ESC%[2J%_ESC%H"<nul

  %_loop% (

    for /f "tokens=1-4 delims=:.," %%a in ("!time: =0!") do set /a "t2=(((1%%a*60)+1%%b)*60+1%%c)*100+1%%d-36610100, tD=t2-t1, tD+=(tD>>31) & 8640000, el+=1"
 
    %= 4=25 FPS max =%
    if !tD! geq %_dT% (

    %= Full loop (120)*31416/60 or multiple of 120 =%
    set /a "t1=t2, rt+=31416/60, il+=1, fc+=1"

    if %_ndx% lss 36 if !il! gtr 20 (
        set /a "z=el/il"
        if !il! gtr 2000 set /a "il=el=0"
        if !z! gtr 20 goto :exit
    )

    if !fc! geq 50 (
        set /a "elaps=(t2-oldt), FPS=1000*fc/elaps, oldt=t2, fc=0"
        title Sphere 3D - FPS:!FPS:~0,-1!.!FPS:~-1! - splits:%_ndx% ratio:!z!
        set "elaps="
        set "FPS="
    )

    if !ds! lss 1000 (set /a ds+=10)

    %= Cos(x)=Sin(PI/2-x) =%
    set /A "sx=%_SIN(x):x=rt%, cx=%_SIN(x):x=(15708-rt)%"

    For /f "tokens=1,2" %%a in ("!sx! !cx!") do (
    set "cx=" & set "sx="

    set "s=!s!%_ESC%[92m"
    set "e=!e!%_ESC%[30m"

    %= Bright Foreground Red =%
    set "t=!t!%_ESC%[91m"

    %= Poles =%
        for %%f in (%_PX%) do for /f "tokens=1,2" %%g in (%%f) do (
        for %%t in (%_PY%) do for /f "tokens=1,2" %%u in (%%t) do (
            set /a "a=%_R%*%%h/10000*%%u/10000, c=%_R%*%%g/10000*%%u/10000, b=%_R%*%%v/10000, a=(a*%%b/10000-(b*%%a+c*%%b)/10000*%%a/10000)*%%b/10000-(b*%%b-c*%%a)/10000*%%a/10000, b=(%_R%*%%h/10000*%%u/10000*%%b/10000-(b*%%a+c*%%b)/10000*%%a/10000)*%%a/10000+(b*%%b-c*%%a)/10000*%%b/10000, c=%_R%*%%h/10000*%%u/10000*%%a/10000+(%_R%*%%v/10000*%%a+c*%%b)/10000*%%b/10000, a=ds*a/(c-%_dz%)+%_dx%, b=ds*b/(c-%_dz%)+%_dy%"
            if !c! lss 0 (
                set "s=!s!%_ESC%[!b!;!a!H·"
            ) else (
                set "d=!d!%_ESC%[!b!;!a!H♥"
    )))

    set /A "z=1"

    %= meridians =%
    for %%f in (%_X%) do for /f "tokens=1,2" %%g in (%%f) do (

      For %%C in (!z!) do set "t=!t!%_ESC%[38;5;!C_%%C!m"

      %= parallels =%
          for %%t in (%_Y%) do for /f "tokens=1,2" %%u in (%%t) do (

            set /a "a=%_R%*%%h/10000*%%u/10000, c=%_R%*%%g/10000*%%u/10000, b=%_R%*%%v/10000, a=(a*%%b/10000-(b*%%a+c*%%b)/10000*%%a/10000)*%%b/10000-(b*%%b-c*%%a)/10000*%%a/10000, b=(%_R%*%%h/10000*%%u/10000*%%b/10000-(b*%%a+c*%%b)/10000*%%a/10000)*%%a/10000+(b*%%b-c*%%a)/10000*%%b/10000, c=%_R%*%%h/10000*%%u/10000*%%a/10000+(%_R%*%%v/10000*%%a+c*%%b)/10000*%%b/10000, a=ds*a/(c-%_dz%)+%_dx%, b=ds*b/(c-%_dz%)+%_dy%"

        if !c! lss 0 (
            set "s=!s!%_ESC%[!b!;!a!H·"
        ) else (
            %= *Φ•○♥øo =%
            set "d=!d!%_ESC%[!b!;!a!H♥"
        )

          ) %= parallels =%

      set "t=!t!!d!"
      set "e=!e!!d!"
      set "d="

      set /A z+=1
          
    ) %= meridians =%
    )

    %= intrinsic cls =%
    %= echo zbuffer like, keep separate to overcome 8k limit =%
    echo(!s!
    echo(!t!

    set "s=!s! "
    set "t=!e!  "
    %= keep space for empty "t" =%
    set "e= "

    %= Foreground Black =%
    set s=!s:92m=30m!

    set /a i+=1
    if !i! geq 3 (
        set "s=!s:* =!"
        set "t=!t:* =!"
    )

    ) %= if !tD! geq _dT =%
  ) %= end_loop =%
)
:exit

(endlocal & set /a rt=%rt%, ds=%ds%)

goto :eof


forum3bis.jpg
 

My Computer

System One

  • OS
    Windows 11 10.0.22000
    Computer type
    Laptop
    Manufacturer/Model
    Asus X555QG
    CPU
    AMD A10-9620P 2500MHz 4core + Radeon R5
    Motherboard
    X555QG 1.0
    Memory
    16GB
    Graphics Card(s)
    RADEON R5+RADEON R6
    Sound Card
    Conexant SmartAudio HD
    Screen Resolution
    1366x768 native - up to 1920x1080
    Hard Drives
    HDD 1 Tera
    Internet Speed
    54Mbps
    Browser
    edge-firefox
    Antivirus
    windows defender
this is the file
 

Attachments

  • sphere3d_0.0.3 - forum.zip
    2.9 KB · Views: 1

My Computer

System One

  • OS
    Windows 11 10.0.22000
    Computer type
    Laptop
    Manufacturer/Model
    Asus X555QG
    CPU
    AMD A10-9620P 2500MHz 4core + Radeon R5
    Motherboard
    X555QG 1.0
    Memory
    16GB
    Graphics Card(s)
    RADEON R5+RADEON R6
    Sound Card
    Conexant SmartAudio HD
    Screen Resolution
    1366x768 native - up to 1920x1080
    Hard Drives
    HDD 1 Tera
    Internet Speed
    54Mbps
    Browser
    edge-firefox
    Antivirus
    windows defender
Back
Top Bottom