标题: [游戏娱乐] 批处理勾股画圆 [打印本页]
作者: CrLf 时间: 2011-10-7 23:21 标题: 批处理勾股画圆
发帖时就勾股定理还是股沟定理的问题纠结了半天,天呐,数学老师我对不起您...
基本代码如下:- @echo off & setlocal EnableDelayedExpansion
- set /a n=20
- for /l %%a in (-%n% 2 %n%) do (
- for /l %%b in (-%n% 1 %n%) do (
- set /a r2=%%a*%%a+%%b*%%b-n*n
- if !r2! gtr 0 (set /p=@) else set /p=_
- )
- echo;
- )<nul
- pause>nul
复制代码
以下没什么技术含量,纯凑字数显得帖子比较丰满。
稍稍改动画个空心圆:- @echo off & setlocal EnableDelayedExpansion
- set /a n=20,m=0,nn=n+1
- for /l %%a in (-%n% 2 %n%) do (
- setlocal
- for /l %%b in (-%n% 1 %nn%) do (
- set /a "m=(%%a*%%a+%%b*%%b-n*n-1)>>31",test=!m!-m
- if !test!==1 (set r=!r!@) else (
- if !test!==-1 (set "r=!r:~,-1!@ ") else set "r=!r! "
- )
- )
- echo;!r!
- endlocal
-
- )
- pause
复制代码
再简单加个循环...噢,我真蛋疼- @echo off & setlocal EnableDelayedExpansion
- mode con:cols=220 lines=80
- :c
- set /a n+=1,m=0,nn=n+1
- setlocal
- for /l %%a in (-%n% 2 %n%) do (
- for /l %%b in (-%n% 1 %nn%) do (
- set /a "m=(%%a*%%a+%%b*%%b-n*n-1)>>31",test=!m!-m
- if !test!==1 (set r%%a=!r%%a!@) else (
- if !test!==-1 (set "r%%a=!r%%a:~,-1!@ ") else set "r%%a=!r%%a! "
- )
- )
- set m=0
-
- )
- cls
- for /l %%a in (-%n% 2 %n%) do echo !r%%a!
- ping /n 1 localhost>nul
- endlocal
- goto c
复制代码
有兴趣的童鞋还可以尝试绘制同心圆
作者: Hello123World 时间: 2011-10-7 23:53
原来已经到达这种程度了啊,zm sama!
我对你的敬仰犹如滔滔江水……,你懂的
作者: CrLf 时间: 2011-11-30 20:36
多圆并集:- @echo off & setlocal EnableDelayedExpansion
- title 多圆并集
- mode con:cols=102 lines=42
- set /a x=50,y=40
- for /l %%a in (-%y% 2 %y%) do (
- set "echo= "
- for /l %%b in (-%x% 1 %x%) do (
- set "echo=!echo! "
- 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 (
- for /f "tokens=1-3" %%d in ("%%~c") do (
- set /a "r2=(%%b-%%d)*(%%b-%%d)+(%%a-%%e)*(%%a-%%e)"-%%f*%%f*4"
- if !r2! leq 0 set echo=!echo:~,-1!@
- )
- )
- )
- echo;!echo:~1!
- )
- pause>nul
复制代码
以此为基础的多个随机圆并集:- @echo off & setlocal EnableDelayedExpansion
- title 随机圆
- mode con:cols=102 lines=42
- set /a x=50,y=40
- for %%a in (2 3 4 5 6 7 9) do (
- set /a a=!random!%%90-45,b=!random!%%60-30
- set c=!c! "!a! !b! %%a"
- )
- for /l %%a in (-%y% 2 %y%) do (
- set "echo= "
- for /l %%b in (-%x% 1 %x%) do (
- set "echo=!echo! "
- for %%c in (!c!) do (
- for /f "tokens=1-3" %%d in ("%%~c") do (
- set /a "r2=(%%b-%%d)*(%%b-%%d)+(%%a-%%e)*(%%a-%%e)"-%%f*%%f*4"
- if !r2! leq 0 set echo=!echo:~,-1!@
- )
- )
- )
- echo;!echo:~1!
- )
- pause>nul
复制代码
作者: CrLf 时间: 2011-11-30 20:38
空心圆实现起来有点麻烦,效率比较低,这里画一个奥运五环:- @echo off&setlocal EnableDelayedExpansion
- (for /f "delims==" %%a in ('set') do set %%a=
- path %path%)
- set /a y=30,x=49
- title 奥运五环
- mode con:cols=100 lines=32
- for /l %%a in (-%y% 2 %y%) do (
- set /a echo=m1=m2=0
- for /l %%b in (-%x% 1 %x%) do (
- set "echo=!echo! "
- for %%c in ("-26 -13 9" "0 -13 9" "26 -12 9" "-13 12 9" "13 12 9") do (
- for /f "tokens=1-3" %%d in ("%%~c") do (
- 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!@"
- )
- )
- )
- echo;!echo:~1!
- ) 2>nul
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |