找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 34687|回复: 10

[游戏娱乐] 批处理勾股画圆

[复制链接]
发表于 2011-10-7 23:21:52 | 显示全部楼层 |阅读模式
发帖时就勾股定理还是股沟定理的问题纠结了半天,天呐,数学老师我对不起您...

基本代码如下:
  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
复制代码
有兴趣的童鞋还可以尝试绘制同心圆

评分

参与人数 2技术 +2 收起 理由
lllsoslll + 1 思路不错。。
523066680 + 1 有想法

查看全部评分

发表于 2011-10-7 23:53:09 | 显示全部楼层
原来已经到达这种程度了啊,zm sama!

我对你的敬仰犹如滔滔江水……,你懂的
 楼主| 发表于 2011-11-30 20:36:41 | 显示全部楼层
多圆并集:
  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
复制代码
 楼主| 发表于 2011-11-30 20:38:27 | 显示全部楼层
空心圆实现起来有点麻烦,效率比较低,这里画一个奥运五环:
  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
复制代码
发表于 2011-12-13 12:58:41 | 显示全部楼层
我的天,这样都行…… 不过很占cpu下~
发表于 2012-3-1 13:27:29 | 显示全部楼层
实在是牛逼啊。。。。。。。。
发表于 2012-3-1 17:44:54 | 显示全部楼层
回复 1# CrLf

    长了见识。
    以前开过贴子征集思路的,大家都只想到用开根的方法,没想到用勾股数。
发表于 2018-4-28 10:23:18 | 显示全部楼层
真的是超乎想象,批处理还可以这样模拟画图动作,厉害了,大神
发表于 2018-8-5 17:09:09 | 显示全部楼层
厉害了,大神
发表于 2019-6-27 17:54:36 | 显示全部楼层
666 23333333333333333333
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 20:18 , Processed in 0.020131 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表