Discuss Scratch

oligami
Scratcher
100+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

#100
三角関数を使わない説明となると、長方形で囲って分けられた合同な図形を比と三平方の定理を用いて計算する感じになると思います。今時間無いので詳細は乞われたらにします。
KimiruHamiru
New Scratcher
500+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

hayato0427 wrote:

小4でもわかるscratchの四角を回す方法の解説をお願いします
(理由まで)
(質問者のプロジェクトを眺めた感じ「座標値を変化させる」というあたりに興味があるのかなと思ったので前回の回答になったのですが)
話をちょっと戻して、

Scratchの四角を回す方法」ということだと、
・コスチュームエディタで四角をかく
・以下のコードを実行する
x座標を(0)、y座標を(0)にする
(90)度に向ける
(60)回繰り返す
(6)度回す
end
これが「Scratchで四角を回す」という課題に対する解答としては、
「ストレートで一番簡単で、他のどんな方法よりも実行速度も速い、ベストな方法」
と思います。また、
・「Scratchを使ってる小4」ならきっとわかる
・理由の説明は、ブロックを見れば、きっといらない
・この例は明らかに平面上の四角を、平面上で回転している
かなと思います。

「これでは聞きたいことに答えてない!」
「これではわからない!」
「このやり方では、自分がやりたいことは表現できない!」
と思う場合は、「この回答では、どこに問題があるか、質問をした人が、意思表示する」ということをしないと、「期待した答え」は得られないと思います。
KimiruHamiru
New Scratcher
500+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

ペン(スタンプ使わない)で四角を描く場合、
一番単純なのはこんなコードになるかと思います。
消す
x座標を(0)、y座標を(0)にする
ペンを下ろす
x座標を(100)、y座標を(0)にする
x座標を(100)、y座標を(100)にする
x座標を(0)、y座標を(100)にする
x座標を(0)、y座標を(0)にする
ペンを上げる
ここで、四角を動かす(平行移動する)というとこんなコードで表現できます…
消す
x座標を((0)+(マウスのx座標))、y座標を(0)にする
ペンを下ろす
x座標を((100)+(マウスのx座標))、y座標を(0)にする
x座標を((100)+(マウスのx座標))、y座標を(100)にする
x座標を((0)+(マウスのx座標))、y座標を(100)にする
x座標を((0)+(マウスのx座標))、y座標を(0)にする
ペンを上げる
が、私は「数字がたくさん並んでるのを、いつも気にしておく」のがつらいんです。

つづく。
KimiruHamiru
New Scratcher
500+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

つづき。

ここで、
座標値を覚える
消す
x座標を([vertArray v]の(1)番目)、y座標を([vertArray v]の(2)番目)にする
ペンを下ろす
x座標を([vertArray v]の(3)番目)、y座標を([vertArray v]の(4)番目)にする
x座標を([vertArray v]の(5)番目)、y座標を([vertArray v]の(6)番目)にする
x座標を([vertArray v]の(7)番目)、y座標を([vertArray v]の(8)番目)にする
x座標を([vertArray v]の(9)番目)、y座標を([vertArray v]の(10)番目)にする
ペンを上げる

定義 座標値を覚える
[vertArray v]のすべてを削除する
(0)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
とやっても同じことで、さらにこれを

座標値を覚える
[変数 v]を(0)にする
消す
(5)回繰り返す
x座標を([vertArray v]の((変数)+(1))番目)、y座標を([vertArray v]の((変数)+(1))番目)にする
ペンを下ろす
[変数 v]を(2)ずつ変える
end
ペンを上げる

定義 座標値を覚える
[vertArray v]のすべてを削除する
(0)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(100)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
(0)を[vertArray v]に追加する
ここまでやっておくと、移動操作の設定は、
x座標を([vertArray v]の((変数)+(1))番目)、y座標を([vertArray v]の((変数)+(2))番目)にする
の1行を実行する瞬間のことだけ考えればいい、プロジェクトの他のブロックについては、全く考えなくていい、という状態にできます。私が普段書いてるプロジェクトでは、もう一歩進めて、

[x v]を([vertArray v]の((変数)+(1))番目)にする
[y v]を([vertArray v]の((変数)+(2))番目)にする
xとyをどうにかする(x),(y)
x座標を(x)、y座標を(y)にする

定義 xとyをどうにかする(x),(y)
[x v]を(x)にする
[y v]を(y)にする
という形にして、「この定義をどうにかすればいい。他のコードは無視してここだけ書き換えてる限りほかに影響はでないし、結構色んな事が表現できる」という状態にしています。

つづく。
KimiruHamiru
New Scratcher
500+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

つづき

定義 xとyをどうにかする(x),(y)
[x v]を(x)にする
[y v]を(y)にする
を使って、最初に書いた「移動」を表現すると
定義 xとyをどうにかする(x),(y)
[x v]を((x)+(マウスのx座標))にする
[y v]を(y)にする
となります。ここまでで、

「四角とはどんなもの」を1つのリストに押し込めて、
「移動とはどんなこと」を1つの定義に押し込める

ということができました。

あとは、わりと自由自在です。

ここまで、「四角を回す」話にはかすりもしていませんが、
ペンを使う状態で「四角を回す」ためには、ここまでの前提知識があると、考えるのが、かなり楽です。
というか私の場合は、ここまでの前提が頭に入ってないと、考えるのがかなり難しいです。

もう少しつづく
KimiruHamiru
New Scratcher
500+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

つづき
「回転」では、「元の座標」を「別の座標」へ動かすわけなんですが、

「x軸移動」とかとは違って、元のy座標が、別のxの座標に影響を与えます。

ここで、
「元のx座標と元のy座標」をどうにかして
「別のx座標と別のy座標」に変化させる
という実験装置を作ります。

定義 xとyをどうにかする(x),(y)
[x v]を(((x)*(1))+((y)*(0)))にする
[y v]を(((x)*(0))+((y)*(1)))にする

この「4つの数字」をいろいろいじってみるとよいかなと思います。

「四角形」のニュアンスがちょっと違いますが、仕組み的には、

https://scratch-mit-edu.ezproxyberklee.flo.org/projects/616038327/

・「連動スイッチ」を切った(0)のが生の状態。
・「連動スイッチ」を入れた(1)にしたのが、「回転」に近い状態。
です。
この辺の仕組みを作って実験していると、「回転って何?」というのに近づけるかもと思います。
「長さが一定」というのは四則演算(+-×÷)で表現できないのでいよいよ「アレ」がほしくなってくるんではないかと思います。

「望むべき回転」には2,3歩足りない感じですが、ここで連投を終わっておきます。

Last edited by KimiruHamiru (July 1, 2022 05:03:04)

KimiruHamiru
New Scratcher
500+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

「3Dについて話し合うトピック」なので一応3Dの話題に振っておくと
ここまでの話の延長にあるのがこのプロジェクト
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/639384394
です。3次元(x,y,z)に拡張していますが、各「操作」は1次元(平行移動)とか2次元(各軸回転)です。
Elevator_yukkuri123
Scratcher
100+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

3Dのプロジェクトの作り方が分かりません、、どうやって作ればいいですか?

Last edited by Elevator_yukkuri123 (July 9, 2022 10:57:49)

StrongPeanut
Scratcher
1000+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

Elevator_yukkuri123 wrote:

3Dのプロジェクトの作り方が分かりません、、どうやって作ればいいですか?
この記事を読んでみてください。
KimiruHamiru
New Scratcher
500+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

Elevator_yukkuri123 wrote:

3Dのプロジェクトの作り方が分かりません、、どうやって作ればいいですか?
3Dの何がむずかしくて何がかんたんなのか、わからなくなってきたのですが、

たとえば、こんなのはどうでしょうね。
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/712973032/

「マウスボタンを押している状態」では、
マウスのx座標に合わせて猫が動くだけの「2Dのコード」になります。

「3Dのコード」は
・w=300/(300+z)という式(遠く=zが大きくなる=小さく見える)
・「xとyと大きさ」を全部w倍している部分
だけにしてみました。

簡単すぎ?難しすぎ?
tomato-0809
Scratcher
100+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

部外者ですが
wのコードが何をしたいのかわからない感じです。
wが何をしたいのかがわかれば後は理解できます。
小6には無理なのかも
KimiruHamiru
New Scratcher
500+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

tomato-0809 wrote:

wのコードが何をしたいのかわからない感じです。
wが何をしたいのかがわかれば後は理解できます。
指摘ありがとうございます。

見ている人から1メートル先にある棒を
見ている人から3メートル先に置くと
棒は短く見える。長さは1/3に見えるはず

みたいなことをやっています。

具体的には、
・ネコを画面上の0,0に100%の大きさで表示している
・画面を見ている人は「画面の300ピクセル手前」にいて「画面中央0,0を見ている」
と考えて、

画面上で100%で見えるネコを、画面よりも奥、見ている人から600ピクセルの距離(2倍遠く)に移動したら、50%(元の1/2)の大きさで見えるはず
画面上で100%で見えるネコを、画面よりも奥、見ている人から900ピクセルの距離(3倍遠く)に移動したら、33%(元の1/3)の大きさで見えるはず

みたいなことを表現しています。
「画面上にある」ものは100%の大きさでスタンプ、「画面より奥にある」ものはそれより小さくスタンプ、しています。

zは画面上、つまり「画面の手前でも奥でもなくぴったり画面上にある場合」を「0」
としていて、奥をプラス、手前をマイナスで、画面上のピクセルと同じ扱いで、何ピクセルの距離にあるか、という表現にしています。

wという変数名はあんまりよくないと思っているのですが、「意味が確実に伝わって、見た目上こわくない充分に短い名前」を、まだ思いついてないので、x,y,zに近いアルファベットにしています。wという名前をこの意味で使うのは一般的ではないと思います(glslでほぼ同じ概念でwが出てくるけどそれは分母分子が逆のはず)。
tomato-0809
Scratcher
100+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

なるほど、何をしたいのか意味はわかるけど、なぜそのコードなのかがうまくわからない感じです。
やっぱ小6には無理かも
takoyariika
Scratcher
48 posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

クローンのレイヤーの上下関係(3Dの前後の表現)について教えてください。
今作っているゲームは疑似3dのゲームなんですが、Y軸の位置によってレイヤーの上下を変えたいんですがいい方法はありますか?
今使ってる方法は
①全部のクローンのY座標とIDをリストに入れる
②リストY座標順に並べ替える
③IDをY座標順に並べ替える
④IDの順番に定期的にクローンを前面に表示する

この方法だと何故かうまくいかないので何かいい方法があったら教えてください。
KimiruHamiru
New Scratcher
500+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

takoyariika wrote:

クローンのレイヤーの上下関係(3Dの前後の表現)について教えてください。
今作っているゲームは疑似3dのゲームなんですが、Y軸の位置によってレイヤーの上下を変えたいんですがいい方法はありますか?
今使ってる方法は
①全部のクローンのY座標とIDをリストに入れる
②リストY座標順に並べ替える
③IDをY座標順に並べ替える
④IDの順番に定期的にクローンを前面に表示する

この方法だと何故かうまくいかないので何かいい方法があったら教えてください。
直感的には4の部分の各クローンの実行順辺りが怪しい気がします(やや当てずっぽうです)。
多分手順は違うのですが、目指す方向の完成品として、
https://scratch-mit-edu.ezproxyberklee.flo.org/projects/307388424/
が参考になるかなと思います。
Tetuo2010
Scratcher
100+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

上から見た3dゲームってどうやって作るんですか
教えて下さい
Poteto143
Scratcher
1000+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

Tetuo2010 wrote:

上から見た3dゲームってどうやって作るんですか
教えて下さい
まずはScrarchですでに作られている「上から見た3dゲーム」を探して、その作品の中を見てみるといいかもしれません。
その上でわからないことがあればここで聞いてみるといいと思います。
Tetuo2010
Scratcher
100+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

ペンを使わず3dを作る方法ってありますか
tomato-0809
Scratcher
100+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

これのようなものですか。
yukku
Scratcher
1000+ posts

3Dについて話し合うトピック ※最初に#1を必ず読もう※

>> #118

例えばこういう方法があったりします。作るのは結構大変そうですが…

Powered by DjangoBB