0コメント

マイクラで座標点的に円を描きたいんじゃあ~【三角関数】

こにゃにゃちわ=^_^=

高校数学(数学II)は勉強したこと、実業高校の人でもあるでしょう


x^2 + y^2 = r^2
x = r cosθ
y = r sinθ

とかって式、見たことあるんじゃなかろうか


          ・



     ・          ・



・         〇           ・



     ・          ・



          ・

ここに点・があるじゃろ
で中心が〇。
点の座標は
x=0,     y=5
x=2.5,  y=2.5
x=5,     y=0
x=2.5,  y=-2.5
x=0,     y=-5
x=-2.5, y=-2.5
x=-5,    y=0
x=-2.5, y=2.5
の八個の点がありますよネ

これ、線でつなげるとひし形◇になりますよね。


では円状にしたい場合。

まあまず点八個じゃ足りないね、32個くらいほしい


んじゃあ

 〇
これは円だね

中心から黒線部まで、半径1メートルと考えてれば中心から角度がどんだけ変わった直線を黒線部までひいても、それは必ず1メートルになる。

運動会の準備で先生二人で縁を作っていたのを見たことがあるんじゃなかろうか

 というか、普通にコンパスで例えりゃよかったか

ぐるーっと回すと、コンパスの針と鉛筆の距離は円を描いた後も変わらない

中心から同じ距離で線を書き続けると円になるわけで。


じゃあ何が言いたいって、上のひし形はxとy座標値はキリのいい数字だったと思います。5とか2.5とか

じゃあ円にしたときの座標。

これがややこしいもので、ちょうど円の右上の座標を現すと

x=0.7076,y=0.7076

こうなる。
じゃあその点より少し下に行ったところの座標


これがどうやって求めるんだろうなああああ




というわけで、公式を使おう

原点0,0の円からの距離rとx軸を基準とした角度θの情報からx,yの座標を割り出す事が出来る。

とはいえ、マイクラでこの方法使うのは割と強引ではあるがな・・・w


x = r cosθ
y = r sinθ

で割り出せるそうな。

端的に言ってしまえば、マイクラではparticleコマンドでminecraft:dustで小さい雲みたいなエフェクトを表示させる事が出来る。
それを点として円のように表現したい。


ただ、円を描く方法ってのは実際には存在する

コンパスと同じ原理で、アーマースタンドから視点先1ブロックにパーティクルを表示させ、1tick(0.05秒)以未満でアーマースタンドの視点を角度的に回転させ、再びパーティクル表示コマンドを実行、これを繰り返すことで
さっき説明した「中心から黒線まではどの角度であっても距離は同じ」という原理を逆手にとって円を描くことができる。まんまコンパスだね

ただ、アイテムの周りを回転するようにパーティクルを表示させたい場合、視点というデータ値を所持していないアイテムにはこの技法が使えないわけだ


・・・しかし、それも回避する方法がある

特定アーマースタンドを回転させておきas(エンティティ指定)とat(場所指定)が別々なサブコマンド機能実装のおかげで、asで回転角度だけ情報入手、atでアイテムを指定すりゃあいいだけの話だ

しかしマイクラは三次元座標として存在する。

この視点を使った方法はxz軸間でしか使えない

xy軸では視点縦軸制御が必要なのだが、ゲームって大体真下とか真上を向くとそこで止まってしまう。範囲は確か+90から-90だがこれがバグりまくる。

縦円状に制御するのは難しそうだ。
(例えばx軸視点30でy軸視点+90から-90に視点移動させたところで-90まで減算した後x軸視点を180°回転して210に設定し加算させて行かなければならない)

どうせ使いまわせるので今回は半円分の値を表から記録してみようかと思います

r=1円x軸値y軸値
10
22.5°0.92480.4004
45.0°0.70710.7071
67.5°0.40040.9248
90.0°01
112.5°-0.40040.9248
135.0°
-0.70710.7071
157.5°-0.92480.4004
180.0°-10

表からこのような値が出ましたとさ。
R=3だと、
r=3円x軸値y軸値
30
22.5°2.77441.2012
45.0°2.12132.1213
67.5°1.20122.7744
90.0°03
112.5°-1.20122.7744
135.0°
-2.12132.1213
157.5°-2.77441.2012
180.0°-30

これで試してみようかな

execute as @s positioned ~3 ~ ~0 run particle minecraft:dust 1 0 1 2 ~ ~ ~
execute as @s positioned ~2.7744 ~ ~1.2012 run particle minecraft:dust 1 0 0 2 ~ ~ ~
execute as @s positioned ~2.1213 ~ ~2.1213 run particle minecraft:dust 1 0 0 2 ~ ~ ~
execute as @s positioned ~1.2012 ~ ~2.7744 run particle minecraft:dust 1 0 0 2 ~ ~ ~
execute as @s positioned ~0 ~ ~3 run particle minecraft:dust 1 0 1 2 ~ ~ ~
execute as @s positioned ~-1.2012 ~ ~2.7744 run particle minecraft:dust 1 0 0 2 ~ ~ ~
execute as @s positioned ~-2.1213 ~ ~2.1213 run particle minecraft:dust 1 0 0 2 ~ ~ ~
execute as @s positioned ~-2.7744 ~ ~1.2012 run particle minecraft:dust 1 0 0 2 ~ ~ ~
execute as @s positioned ~-3 ~ ~0 run particle minecraft:dust 1 0 1 2 ~ ~ ~
execute as @s positioned ~2.7744 ~ ~-1.2012 run particle minecraft:dust 0 0 1 2 ~ ~ ~
execute as @s positioned ~2.1213 ~ ~-2.1213 run particle minecraft:dust 0 0 1 2 ~ ~ ~
execute as @s positioned ~1.2012 ~ ~-2.7744 run particle minecraft:dust 0 0 1 2 ~ ~ ~
execute as @s positioned ~0 ~ ~-3 run particle minecraft:dust 1 0 1 2 ~ ~ ~
execute as @s positioned ~-1.2012 ~ ~-2.7744 run particle minecraft:dust 0 0 1 2 ~ ~ ~
execute as @s positioned ~-2.1213 ~ ~-2.1213 run particle minecraft:dust 0 0 1 2 ~ ~ ~
execute as @s positioned ~-2.7744 ~ ~-1.2012 run particle minecraft:dust 0 0 1 2 ~ ~ ~

スクリーンショット 2020-09-30 223607.png

ハイ。こんな感じになりました。

実は前からゴリ押しする時ってのはあったんですけど、直線的になりがちだったもんで、これが一種の点プレートになりそうっすね

ただ、サイズが大きくなれば角度をもっと細かく分割(11.25°、33.75°等)して距離の倍率を計算しなおさないといけないのでそこは面倒だけど、まあそれっぽくできるようになったわけだ。

スクリーンショット 2020-09-30 224051.png
前に作った魔法陣パーティクルなんかは、視点先座標を指定してるのでアイテムとかで使うとバグりますね。

うむ。勉強したいのでここらへんで。おやすみ。

0

この記事へのコメント