Board logo

标题: [游戏娱乐] 批处理勾股画圆 [打印本页]

作者: CrLf    时间: 2011-10-7 23:21     标题: 批处理勾股画圆

发帖时就勾股定理还是股沟定理的问题纠结了半天,天呐,数学老师我对不起您...

基本代码如下:
  1. @echo off & setlocal EnableDelayedExpansion
  2. set /a n=20
  3. for /l %%a in (-%n% 2 %n%) do (
  4. for /l %%b in (-%n% 1 %n%) do (
  5. set /a r2=%%a*%%a+%%b*%%b-n*n
  6. if !r2! gtr 0 (set /p=@) else set /p=_
  7. )
  8. echo;
  9. )<nul
  10. pause>nul
复制代码
以下没什么技术含量,纯凑字数显得帖子比较丰满。

稍稍改动画个空心圆:
  1. @echo off & setlocal EnableDelayedExpansion
  2. set /a n=20,m=0,nn=n+1
  3. for /l %%a in (-%n% 2 %n%) do (
  4. setlocal
  5. for /l %%b in (-%n% 1 %nn%) do (
  6. set /a "m=(%%a*%%a+%%b*%%b-n*n-1)>>31",test=!m!-m
  7. if !test!==1 (set r=!r!@) else (
  8. if !test!==-1 (set "r=!r:~,-1!@ ") else set "r=!r! "
  9. )
  10. )
  11. echo;!r!
  12. endlocal
  13. )
  14. pause
复制代码
再简单加个循环...噢,我真蛋疼
  1. @echo off & setlocal EnableDelayedExpansion
  2. mode con:cols=220 lines=80
  3. :c
  4. set /a n+=1,m=0,nn=n+1
  5. setlocal
  6. for /l %%a in (-%n% 2 %n%) do (
  7. for /l %%b in (-%n% 1 %nn%) do (
  8. set /a "m=(%%a*%%a+%%b*%%b-n*n-1)>>31",test=!m!-m
  9. if !test!==1 (set r%%a=!r%%a!@) else (
  10. if !test!==-1 (set "r%%a=!r%%a:~,-1!@ ") else set "r%%a=!r%%a! "
  11. )
  12. )
  13. set m=0
  14. )
  15. cls
  16. for /l %%a in (-%n% 2 %n%) do echo !r%%a!
  17. ping /n 1 localhost>nul
  18. endlocal
  19. goto c
复制代码
有兴趣的童鞋还可以尝试绘制同心圆
作者: Hello123World    时间: 2011-10-7 23:53

原来已经到达这种程度了啊,zm sama!

我对你的敬仰犹如滔滔江水……,你懂的
作者: CrLf    时间: 2011-11-30 20:36

多圆并集:
  1. @echo off & setlocal EnableDelayedExpansion
  2. title 多圆并集
  3. mode con:cols=102 lines=42
  4. set /a x=50,y=40
  5. for /l %%a in (-%y% 2 %y%) do (
  6. set "echo= "
  7. for /l %%b in (-%x% 1 %x%) do (
  8. set "echo=!echo! "
  9. for %%c in ("-42 -3 9" "-15 -26 7" "4 -15 6" "6 1 5" "17 16 4" "32 1 3" "45 4 2") do (
  10. for /f "tokens=1-3" %%d in ("%%~c") do (
  11. set /a "r2=(%%b-%%d)*(%%b-%%d)+(%%a-%%e)*(%%a-%%e)"-%%f*%%f*4"
  12. if !r2! leq 0 set echo=!echo:~,-1!@
  13. )
  14. )
  15. )
  16. echo;!echo:~1!
  17. )
  18. pause>nul
复制代码
以此为基础的多个随机圆并集:
  1. @echo off & setlocal EnableDelayedExpansion
  2. title 随机圆
  3. mode con:cols=102 lines=42
  4. set /a x=50,y=40
  5. for %%a in (2 3 4 5 6 7 9) do (
  6. set /a a=!random!%%90-45,b=!random!%%60-30
  7. set c=!c! "!a! !b! %%a"
  8. )
  9. for /l %%a in (-%y% 2 %y%) do (
  10. set "echo= "
  11. for /l %%b in (-%x% 1 %x%) do (
  12. set "echo=!echo! "
  13. for %%c in (!c!) do (
  14. for /f "tokens=1-3" %%d in ("%%~c") do (
  15. set /a "r2=(%%b-%%d)*(%%b-%%d)+(%%a-%%e)*(%%a-%%e)"-%%f*%%f*4"
  16. if !r2! leq 0 set echo=!echo:~,-1!@
  17. )
  18. )
  19. )
  20. echo;!echo:~1!
  21. )
  22. pause>nul
复制代码

作者: CrLf    时间: 2011-11-30 20:38

空心圆实现起来有点麻烦,效率比较低,这里画一个奥运五环:
  1. @echo off&setlocal EnableDelayedExpansion
  2. (for /f "delims==" %%a in ('set') do set %%a=
  3. path %path%)
  4. set /a y=30,x=49
  5. title 奥运五环
  6. mode con:cols=100 lines=32
  7. for /l %%a in (-%y% 2 %y%) do (
  8. set /a echo=m1=m2=0
  9. for /l %%b in (-%x% 1 %x%) do (
  10. set "echo=!echo! "
  11. for %%c in ("-26 -13 9" "0 -13 9" "26 -12 9" "-13 12 9" "13 12 9") do (
  12. for /f "tokens=1-3" %%d in ("%%~c") do (
  13. set /a "test=(((%%b-%%d)*(%%b-%%d)+(%%a-%%e)*(%%a-%%e)-%%f*%%f*4)>>31)-(((%%b-%%d+1)*(%%b-%%d+1)+(%%a-%%e)*(%%a-%%e)-%%f*%%f*4)>>31)","test/=test*test"&&set "echo=!echo:~,-1!@"
  14. )
  15. )
  16. )
  17. echo;!echo:~1!
  18. ) 2>nul
  19. pause>nul
复制代码

作者: raymai97    时间: 2011-12-13 12:58

我的天,这样都行…… 不过很占cpu下~
作者: QIAOXINGXING    时间: 2012-3-1 13:27

实在是牛逼啊。。。。。。。。
作者: 523066680    时间: 2012-3-1 17:44

回复 1# CrLf

    长了见识。
    以前开过贴子征集思路的,大家都只想到用开根的方法,没想到用勾股数。
作者: m91opse    时间: 2018-4-28 10:23

真的是超乎想象,批处理还可以这样模拟画图动作,厉害了,大神
作者: 112    时间: 2018-8-5 17:09

厉害了,大神
作者: 112    时间: 2019-6-27 17:54

666 23333333333333333333




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