Discussions

Petit computer 3 Community

☆むかんちゃん★akari201049

09/15/2017 3:52 AM ·Spoilers

Open Closed

SPROTの回転軸について

SPROTの回転軸って変えられないんですか? また、変えられないならどこが軸になるんですか? 回答お願いしますm(_ _)m

Advertisement

Comment

This post has no comments.

  • 補足ありがとうございます! 補足内で気になったこと ・SPの回転軸のYの負の方向ってどっち? ・+90はDEGに-を付けるだけでもいいの? 答えられたら回答お願いしますm(_ _)m

    Yeahs0
    Played
  • あと気になったのは、if命令で IF T THEN のように変数名を書いていますが、条件は何になるんですか?

    Yeahs0
    Played
  • 軸の正負というのは分かりにくい言い方だったのでもっと分かりやすい言い方にすれば ATANは時計の3時方向を起点にして時計回りの角度、SPROTは時計の12時の方向を起点にして時計回りの角度となります。 ATANで角度を求める際にはATAN(Y,X)となりますが、これをATAN(X,Y)としてX軸とY軸を入れ替えた場合にはATANの角度計算の起点が6時方向となります。2つの時計を用意して6時と3時が重なるようにするには1つの時計を裏返す必要があります。つまり、X軸とY軸を入れ替えるというのは起点が6時方向になるだけではなく求まる角度が反時計回りの角度になるということです。

    Yeahs1
    Played
  • SPROT  12時起点 時計回り XとYを入れ替えたATAN  6時起点 反時計回り 回転の向きが逆なのは角度の頭にマイナスを付ければ良いですが、それだけではなく12時起点と6時起点の整合性を取る必要があります。 これには180度足せば良いのですが、そんなことをしなくてもタッチ座標の差分を取る際に基準点座標とタッチ点座標を入れ替えてやれば良いのです。(本来はTX-IXとTY-IYなのだけどIX-TXとIY-TYをすることで180度回転と同じになっている) これによって、何も追加せずに180度回転したのと同じ効果を得られます。

    Yeahs0
    Played
  • IF T THEN についてですが、IFというのは条件式がtrue(成立)かfalse(不成立)かでTHEN以下を実行するか否かが決まるというのはご存じだと思います。 しかし、プチコン3号においてはtrueというのは0以外の値、falseというのは0を示します。 要するにIF 3 THEN ~のように0以外の値を記述するとTHEN以下を実行し、IF 0 THEN ~のように0を記述するとTHEN以下は実行しないということです。

    Yeahs0
    Played
  • このことを踏まえてIF T THENを見てみると「Tの値が0の時はTHEN以下を実行せずTの値が0でない時は実行する」ということが分かります。 今回の場合だと変数Tはタッチ時間を示しており負数になることはないため「画面をタッチしているならばTHEN以下を実行する」という意味のIF文になっています。 これはIF T>0 THEN と記述したのと同じ意味になるのですが、「T>0」の部分の値(論理式の値)がプチコン3号では条件を満たす時には1になり、満たさない時には0になっているのです。 IF文がどんな時にTHEN以下を実行するのかを知っておくと色々な判定をするときに役立つと思います。

    Yeahs0
    Played
  • 1つめ プチコンの座標の座標で0の方向、つまりy軸の負の方向が基準というのは時計で言うところの12時のとき0度ということです。 2つめ 正確には「XとYを入れ替えてーをつける」です。 ATAN()はXとYを入れ替えると12時の角度が0度になりますが、反時計回りになります。なので、ーを付けて、逆に回転するようにしました。 3つめ IF文が判定しているのは、「IF直後の数値が0かどうか」です。 IF直後の数値が0でないならTHENの後の文を実行してくれます。 つまりIF T THEN~は、「Tが0でないならTHENの後の文を実行する。」という意味になります。 ちなみに今まで使っていた「A==B」は、「AとBが等しいなら1を返す」という意味です。 試しに PRINT 1==1 とか打ってみると1と表示されるはずです。

    Yeahs0
    Played
  • 回答ありがとうございます! とりあえずif文の条件は分かりました! しかし、まだ回転方法は理解しきれてないので、塾から帰ってきたらじっくり読ませて頂きます。

    Yeahs0
    Played
  • 塾が忙しかったので返信遅れましたorz +180度の代わりに~のところがよく分からなかったですね… 他は多分理解出来てます!

    Yeahs0
    Played
  • 実際に -DEG(ATAN(IX-TX,IY-TY)) の部分を -DEG(ATAN(TX-IX,TY-IY)) に変えて実行してみたり XとYを入れ換えて実行してみたりすれば言いたいことは分かると思います。(雑)

    Yeahs0
    Played
  • ATAN(TY-120,TX-160)をATAN(120-TY,160-TX)のように引く順番を入れ替えるように記述した場合に180度プラスしたような効果をなぜ得られるかというと下図のようになっているためです。 ただし、差分とATANという2つの要素が絡むためもしかすると理解するのが難しいかもしれません。 その場合は単純な数直線で考えてみたらよいと思います。 例えば7-3=4というのは基準点3に対して+4の位置であり、3-7=-4というのは基準点7に対して-4の位置であることが分かります。 数字の大きい方が東、小さい方が西と考えると起点から終点に向かう場合7-3(座標3から座標7に移動)では東に4km進み、3-7(座標7から座標3に移動)では東に-4km(=西に4km)進むということで起点と終点を入れ替えることで進む向きが反対方向になるのが分かるでしょう。

    Yeahs0
    Played
  • 数学の座標を基準にしてのお話。(書いたら長くなった) ATANは数学関数なので、上が+Y、下が-Y、右が+X、左が-Xの座標。 数学の角度は時計の3時方向から12時方向に向かって増えていく(反時計回りで、値はラジアン) プチコンの座標は上が-Y、下が+Y、右が+X、左が-Xの座標。 SPROTでの角度は時計の12時方向から3時に向かって増えていく(時計回りで、値は度) プチコンでラジアンから度に変換するのは DEG 関数 数学の座標とプチコンの座標でY軸が上と下でプラスとマイナスが逆なのと、 数学の角度とSPROTの角度の向きが逆なので、角度や座標にマイナスが入ったりしてるので、ちょっとややこしいのです。 ※おちゃめさんのは全てプチコン座標で書いてあるので数学とは上下が逆になってます

    Yeahs0
    Played
  • プチコンの座標は Yの向きが逆なので、 プチコンの 6時の位置は数学関数では 12時として扱われて、 プチコンの 5時の位置は数学関数では 1時として扱われます ATANは数学座標を渡すなら 3時から12時に向かって角度の値は反時計回りで増えるけど プチコン座標を渡すなら 3時から6時に向かって角度の値は時計回りで増えます ※プチコンの4時は数学では2時なので30度と返ります。プチコンの6時は数学では12時なので90度と返ります。 SPROTも、ATANにプチコン座標を渡したのも、時計回りになって、 ATANが 3時基準、SPROTが 12時基準なので、ATANの結果に(ラジアンなので度に変換して)90度を足した値を SPROTに渡せばそのとおりになるのです。 ※おちゃめさんの画像付き説明のところ

    Yeahs0
    Played
  • 中学高校数学でも座標でXとYを入れ替えるってほとんどしないのでわかりづらいけど、 XとYを入れ替えた場合、3時の位置から12時の位置に向かって動く場合、12時から3時に動くようになります。 3時の位置から6時まで動く場合、12時から 9時まで動きます。 (2時が X=0.8, Y=0.5としたら X=0.5, Y=0.8は 1時、 11時が X=-0.5, Y=0,8としたら X=0.8, Y=-0.5 は4時) Xをマイナスすると Y軸で反転、 Yをマイナスにすると X軸で反転、 XとYを入れ替えると、グラフX=Y の軸(数学では右上斜めの軸)で反転した位置になります プチコンの座標は Yの向きが逆で、XとYを入れ替えた場合、グラフX=Yの軸(右下斜め)で反転します プチコンの 6時の位置は、XY反転で 3時として扱われて、 プチコンの 5時の位置は、XY反転で 4時として扱われます

    Yeahs0
    Played
  • ATANにプチコン座標を渡すと3時基準で時計回りに角度が増えるけど、 プチコン座標のXとYを入れ替えてATANに渡すと、6時基準で反時計回りに角度が増えます 角度にマイナスを付ければ反時計回りが時計回りとして扱えるので、 XY入れ替えたATANの角度の値にマイナスを付ければ 6時基準で時計回りになります タッチした位置をATANに渡すと3時基準で時計回りに角度が増えて タッチした位置をXY入れ替えてATANに渡した角度をマイナス扱いにすると、6時基準で時計回りに角度が増えます SPROTは 12時基準で時計回りの角度指定で、 XY入れ替えたATANの角度のマイナスの値は 6時基準で時計回りに角度の値が増える SPROTの12時基準と180度の差になるので、 XY入れ替えたATANの値(をラジアンから度に変換した値)に 180度を加算した値をSPROTに渡すと、期待通り動きます。

    Yeahs0
    Played
  • 角度というのは、中心があって、何時を基準として時計回り・反時計回りにどれだけ進んだかの値です。 数学では、時計の真ん中を中心として、3時の位置(中心から右方向)を基準として反時計回りに角度を数えます。 時計の真ん中を中心として、中心から右方向を基準として、1時の角度は、中心の右方向(3時)から +60度です。 1時の場所を中心として、1時から右方向を基準として、時計の真ん中の角度は、1時の右方向から -120度です (180度先の7時の角度を求めるのと同じ) 中心と求める位置と基準があって角度が求まりますが、中心と求める位置の場所を逆にするとちょうど180度の差があります。 画面を中心にタッチ位置の角度を求めていましたが、 タッチ位置を中心に画面中心の角度を求めると180度の差があるので、180度の計算をしなくてよいというのが、 おちゃめさんの言っている180度のしくみです。

    Yeahs0
    Played
  • いちおう、数学の上が+Yの座標系が先にあって、プチコン(やコンピュータ系)の下が+Yの座標系が後になって作られているので、 座標系を理解するには本当は先に中学の数学で習うグラフの知識があった方が良いです。 (おちゃめさんの図もちゃんとY軸は下向きに矢印が向いているので、下方向にYが増えるという図になってます) SPROTが12時基点時計回りだったり、XとY入れ替えるとこんな動きするので短縮すればプチコンではこう書けたりとか、 かなりプチコン独特や、Y座標が下向きのコンピュータ系の書き方がいろいろあって悩むところなのです。 そして、「タッチした方向に回転させる」という簡単そうに見えることでも、ちゃんと理解しようとするとこれだけの細かい知識や考え方が必要だったりするので、 いろんなプログラムをできるようになるのは、ほんとうにコツコツと細かい事を知って行く必要があるのです。

    Yeahs0
    Played
  • 回答ありがとうございます! あまりの長文に驚きましたw またじっくり読ませて頂きます。

    Yeahs0
    Played
  • 返信遅れてすみません! リアルが忙しくて中々じっくり読めなかったのですが、明日読めると思います。

    Yeahs0
    Played

Add a Comment

You must sign in to post a comment.

Sign in using a Nintendo Network ID to connect to users around the world by writing posts and comments and by giving Yeahs to other people's posts. You can create a Nintendo Network ID using your Wii U console or your system in the Nintendo 3DS family.

Use of Miiverse Details about Miiverse

Report Violation to Miiverse Administrators

You are about to report a post with content which violates the Miiverse Code of Conduct. This report will be sent to Nintendo's Miiverse administrators and not to the creator of the post.

Violation Type:

Post ID: 3DB-NBL7-DPU-2NL8-CHZ-D7N6

Report Violation to Miiverse Administrators

You cannot report posts made automatically by a software title.

Edit Post

Select an action: