鱼仙仙仙仙
本帖最后由 鱼仙仙仙仙 于 2022-9-25 16:27 编辑
本帖是关于原版命令画圆的最细炒冷饭
本贴将提到大量细节,找不到可以使用ctrl+F使用网页搜索查找
下文所有指令均为java1.13版本及以上,关于其他java版本与基岩版见版面靠下方
鱼仙仙仙仙原创声明
目前无图,待有空了加几张效果图

随缘目录:
基础画圆指令
纯新手额外补充区
更大的圆绘制计算方法
更精确的圆
更更更大的圆的绘制方法
螺旋通天柱
execute指令的不同版本区别

下正文:
基础画圆指令所用到的指令
/give     获取命令方块
/setblock        
/fill        放置方块
/execute        迁移命令执行对象与地点
/tp       传送指令,此处用来转向圆心盔甲架

首先获取一个命令方块
/give @s minecraft:command_block
命令方块按照如下形态摆放并输入对应的指令(注意命令方块上的箭头)
execute as @e[name=aaa] at @s run tp ~ ~ ~ ~角度 ~
execute as @e[name=aaa] at @s run setblock ^ ^ ^半径 方块 数据值
  1. 带入数字如下
  2. execute as @e[name=aaa] at @s run tp ~ ~ ~ ~1 ~
  3. execute as @e[name=aaa] at @s run setblock ^ ^ ^20 quartz_block
  4. 半径20使用石英块画圆
复制代码
或使用fill指令来放置圆环或者圆形墙壁 fill ^ ^高度 ^内径 ^ ^高度 ^外径 方块
(填写案例:fill ^ ^-1 ^15 ^ ^5 ^16)7格高2格厚的墙壁

命令方块调整后,放置盔甲作为圆心并命名为aaa(名字自定义,但是要同指令中一样)
在18秒后就可以画完一个圆
(每秒20游戏刻,每刻运行一次命令方块,18秒后盔甲架旋转一整周)

更大的圆注意事项
若放置更大半径圆形的时候,若半径超过57.2899616307594246872时,便会出现圆环上有断开的地方少几个方块
关于这个数据的计算过程为1÷tan(1)
此处的意义为,当每次旋转角度为1度时候,最远端放置方块的点就会移动1格以上,因此会出现圆环断开的问题
想要放置更大的圆就需要减少旋转的角度,如每次旋转0.5度可以则可以保证半径114.5886501293096以内的圆不出现断开的情况
计算公式为1÷tan(旋转角度)<圆圈半径
其中圆半径为给定值,旋转角度为变量。
所需要的放置时间为 360÷旋转角度÷20 (单位秒)

以上为更大的圆,想要画得更加精确的圆请继续往下看
本指令是通过旋转圆心盔甲架,以盔甲视线方向延申距离为半径画圆
上方更大的圆只保证了圆圈上每两个采样点中距离小于1而不会造成圆圈断裂,并不表示实际的圆形所压到每一个方块都被放置了方块
理解了此项就不难理解为什么之前画的圆不够精确,想要更加精确的话只能减少每次旋转的角度,这会让这一过程变得非常的缓慢,
解决的方法是,同时放置多个不同朝向的盔甲架作为圆心,可以放在圆心盔甲架的上方,放置不同朝向的盔甲架并命名后打掉其脚下的方块,这么做可以很简单的放置八个朝向的盔甲架来提升8倍的速度。(但此方法不适用于更更更大的圆的画法)

以下为更更更更大的圆的画法(超出视距的未加载的那种远,无限制多远都行)
因为未加载区块的原因,setblock或者fill指令会执行失败,但是前往放置位置后,命令方块所在区块因为卸载而停止运行,以下提出两种解决方案.
方法一
通过forceload指令使方块放置位置变为加载区,放置方块后再取消标注为加载区(未在所有版本尝试,部分版本可能不行)
***(星号代表上方提到的基础指令)
execute as @a[name=aaa] at @s run forceload add ~ ~ ~ ~
***
execute as @a[name=aaa] at @s run forceload remove ~ ~ ~ ~

方法二
将命令方块所在方块标注为加载区,自己前往方块放置地点
因为可能放置的地点实在是太远了,所以选择用tp的方式来移动,但是tp的话就必须远程控制命令方块,以下提供两种远程启动命令方块的方案:
1通过计分板来控制
execute as @e[name=aaa,scores={计分板名称=自定义数字}] at @s run tp ~ ~ ~ ~角度 ~
execute as @e[name=aaa] at @s run tp 玩家id ^ ^ ^半径
execute as @e[name=aaa] at @s run setblock ^ ^ ^半径 方块 数据值
(注:后面两个命令方块为条件命令方块,所以只需要第一个命令方块中添加scores)
优点:控制灵活,可以直接从服务器控制台执行,所有有计分板权限玩家都能控制启动
缺点:计分板指令太长/scoreboard players set 玩家 计分板名 分数

2通过手持物品来控制运行,单人绘制方便,
execute as @e[name=aaa] at @s if entity @a[name=玩家名,nbt={SelectedItem:{预定的物品名}}] run tp ~ ~ ~ ~角度 ~
execute as @e[name=aaa] at @s run tp 玩家id ^ ^ ^半径
execute as @e[name=aaa] at @s run setblock ^ ^ ^半径 方块 数据值

可通过手持特定物品也可通过检测副手
[nbt={SelectedItem:{id:"minecraft:iron_sword"}}]检测主手拿铁刀
[nbt={Inventory:[{id:"minecraft:iron_sword",Slot:-106b}]}]检测副手拿铁刀
这些加在@a后面的选择器中
//当达成条件后继续执行。
本小节通过介绍了远程远程开启加载区,和命令方块开启加载区后,远程控制命令方块启动与否,来达成放置处与命令方块处均处于加载区内。

最后一个环节:螺旋通天的楼梯
这个环节其实非常简单只需要在基础指令中添加一个数字就可以了
execute as @e[name=aaa] at @s run tp ~ ~上升高度 ~ ~角度 ~
execute as @e[name=aaa] at @s run setblock ^ ^ ^半径 方块 数据值
这个高度实际的效果和角度成正比,360÷旋转角度x上升高度   为每一周的上升高度,
通常个人比较喜欢这个值在10~30之间


其他版本指令补充/
较大改动的是execute指令,
java1.12及基岩版本execute指令为
execute @e[name=aaa] ~ ~ ~ tp ~ ~ ~ ~角度 ~
execute @e[name=aaa] ~ ~ ~ setblock ^ ^ ^半径 方块 数据值
关于nbt的赘述那更是一个版本一个样子,建议还是前往wiki

有什么意见建议或问题大家下面回复,在原版提问板块提问加赏金再艾特我我一定喜出望外
下期预告//
画球
多角星,正多边形
椭圆
椭球
阿基米德螺旋(等速螺旋)
等角螺旋
斐波那契螺旋
羊角螺旋(欧拉螺旋)
(随缘预告,更新不定)

///////////////评分点个人气吧顶顶


鱼仙仙仙仙
本帖最后由 鱼仙仙仙仙 于 2022-9-22 22:57 编辑

人气超10火速更新原版指令使用mcfunction一键绘制椭圆椭球和蛋形

核桃仁发345
牛牛牛牛逼,我的世界之圆形

jakceys
真的很厉害我很西化就

信无仰
6666666666666

鱼仙仙仙仙

趁版主没来快去看版规,看完回来抓紧删掉后,出门左转矿工茶歇谢谢

jakceys
可以看一看 你是真那边

没钱就玩mc
学到了学到了

1755504801
看着不错感谢分享

1106376795
这个好啊全自动

lstxasd
这个好66666

Koumato
6666666666666

沐风无疑
mcbbs有你更好

dtf1231
有什么意见建议或问题大家下面回复,在原版提问板块提问加赏金再艾特我我一定喜出望外

滴滴小强嘿
非常感谢 嘎嘎好理解  

滴滴小强嘿
非常感谢 嘎嘎好理解  

muchend
我就说吗mc肯定有圆

不拽o
画圆真的是一生的痛,关键在很多建筑中都很重要很常用,有效解决了问题,顶

不重复的名字
大佬大佬,用了,哇真的很好用

闻名一道
麻了麻了 第一个指令提示错误

闻名一道
大佬 提示第44个字符处错误咋搞

weixiaojian
感谢分享@!!!

13707805763
趁版主没来快去看版规,看完回来抓紧删掉后,出门左转矿工茶歇谢谢

第一页 上一页 下一页 最后一页