| 首先,先说一下两点画圆就是类似于圆规画圆的方式,简单说有以下步骤
 
 这里说明一下迭代获得半径与获得每次旋转角度,与迭代。获得圆心获得半径获得每次旋转角度旋转圆心,在前方半径长度处放方块,并不断重复此步骤直到画圆完成。
 迭代获得半径
 接下来,我们认为圆心是第二个定位点,”圆规的笔尖“是第三个定位点,
 首先,在圆心处创建一个盔甲架,并将其指向“笔尖”;初始化记分板中的#r变量,来保存半径;
 接下来,调用一个自循环的函数,每一次循环都这样做:让盔甲架向“笔尖”迈0.5格,并将#r +50,直到盔甲架与“笔尖”重合(距离小于0.5)。
 这样我们就通过迭代获得了圆的半径。
 命令贴在下方:
 
 获得每次旋转角度说白了就是下面这一个公式:复制代码#@s 指临时盔甲架
#@e[tag=tool_belong,scores={tool_selector=3},limit=1] 指笔尖
#传送
tp @s ^ ^ ^0.5
#记分板设置
scoreboard players add #r tool_calc 50
#再循环
execute as @s at @s unless entity @e[tag=tool_belong,scores={tool_selector=3},limit=1,distance=..0.5] run function tool:circle/loop_get_r
 但是为了更加的精确,每次旋转可能还要除以2或4,这样就得到了每次旋转角度。
 迭代画圆
 画圆的实现是一个双层循环:外层旋转中心,内层将笔尖移到半径处,具体如下动图:
 语文不好,动图来凑
  再看一看命令:外层循环
 
 内层循环复制代码#定义还剩的 半径
scoreboard players operation #r_left tool_calc = #r tool_calc
#调整角度,并重置位置
execute at @e[tag=tool_circle_center,limit=1] run tp @s ~ ~ ~ ~ ~
#调用循环
execute at @s as @s run function tool:arc/loop_to_r
#复制
function tool:clone/clone
#旋转
#获得旋转
scoreboard players operation #rotation_left tool_calc -= #rd tool_calc
#写入
execute store result entity @e[tag=tool_circle_center,limit=1] Rotation[0] float 0.01 run scoreboard players get #rotation_left tool_calc
#循环
execute if score #rotation_left tool_calc matches 0.. as @s at @s run function tool:arc/loop_cw
再来一点细节:这里有两个变量来控制循环,一个是 #r_left ,指还剩多少距离,另一个是 #rotation_left,指还剩多少角度。复制代码#传送
tp @s ^ ^ ^0.5
#减积分
scoreboard players remove #r_left tool_calc 50
#循环
execute unless score #r_left tool_calc matches ..0 as @s at @s run function tool:arc/loop_to_r
好了,这一整个画圆的过程基本讲完了
 
 |