よろしくお願いします。 (y + t × v)^2 = (y2 + t × w)^2を t = の形にしたいのです。 特に2乗の外し方がよくわからず悩んでます。
|
No.55515 - 2018/12/12(Wed) 12:53:28
| ☆ Re: / ヨッシー | | | y+tv=y2+tw ・・・(1) または y+tv=−(y2+tw) ・・・(2) (1) より v≠w のとき t=(y2−y)/(v−w) (2) より v≠−w のとき t=−(y+y2)/(v+w)
いずれも、元の式を満たします。
|
No.55517 - 2018/12/12(Wed) 14:12:15 |
| ☆ Re: / ガラくた屋 | | | 質問に答えていただきありがとうございます。 (1)番と(2)番はその式のとき判別する感じでしょうか? (1)番だけ使っても条件に合わないと答えのーと+の符号が逆になるとかありそうな気がしました。 数値入れて確認してみます。
|
No.55519 - 2018/12/12(Wed) 17:45:55 |
| ☆ Re: / らすかる | | | > (1)番と(2)番はその式のとき判別する感じでしょうか? 変数の範囲など条件がなければ、(1)と(2)の判別は必要ありません。 答えは t=(y2-y)/(v-w) または t=-(y+y2)/(v+w) となります。
> (1)番だけ使っても条件に合わないと もし条件があるなら書いて下さい。
|
No.55520 - 2018/12/12(Wed) 18:31:47 |
| ☆ Re: / ガラくた屋 | | | 返信ありがとうございます。 >変数の範囲など条件がなければ、(1)と(2)の判別は必要ありません。 判別の必要がないのですね。難しく考えてしまいました。 >もし条件があるなら書いて下さい。 プログラミングの計算で点と点の座標をすり抜け防止させるための処理に使おうと考えていて y = y2 に移動量のV,Wを加えて y +v = y2 +w それにすり抜け防止に媒介変数tを加えて y +vt = y2 +wtの計算式にしてました。 tについて計算して出せばすり抜け防止になると思ったのですが 座標と移動量の大きさの関係で媒介変数がマイナスの値になることがあったので、 今回の2乗でくくったらできるのではと思ったのです。 もしよろしければアドバイスお願いします。
|
No.55521 - 2018/12/12(Wed) 18:57:57 |
| ☆ Re: / らすかる | | | 「点と点の座標をすり抜け防止させる」とはどういう意味ですか? yとは何ですか? y2とは何ですか? もう少し具体的に書いていただかないと何をしたいのかわかりません。
|
No.55522 - 2018/12/12(Wed) 19:47:14 |
| ☆ Re: / ガラくた屋 | | | > 「点と点の座標をすり抜け防止させる」とはどういう意味ですか? > yとは何ですか? > y2とは何ですか? > もう少し具体的に書いていただかないと何をしたいのかわかりません。 情報が足りずすいませんでした。 xとyでキャラクターの座標 vx1,vy1で座標の移動量を表します それをもう一つ用意して x2,y2,vx2,vy2にします。 移動量を毎回足して移動させるのですが y = y2になるとそれ以上移動させないようにします。 そこで発生するのがすり抜けです。 vy1,vy2の移動量がvy1 =1,vy2 =3の場合は 移動量の差分が大きいので移動量を足した y + vy1 = y2 +vy2では同じ数字にならずに そのまま移動量が足され続けます。 それを防止するために媒介変数tを導入しました。 それがy +vy1t = y2 + vy2tになります。 それを昨日教えてもらった t=(y2-y)/(vy1-vy2)の形で tの値を求めたらy = y2になる値を出すことができるのではと考えました。 tの値は0より大きくて1よりも小さい値だと現在の移動量になります 最初に2乗としたのはtの移動量がマイナスになって vy1,vy2の移動量が逆向きになることがあったので試してみようとしたら計算がわからず。 お願いしたしだいです。
|
No.55526 - 2018/12/13(Thu) 04:20:01 |
| ☆ Re: / らすかる | | | 平面上を二つのキャラクターがあるベクトルに従って移動したときに その移動途中にぶつかる(同時に同一点を通過する)かどうかを 判定するということですか? それとも 平面上を二つのキャラクターがあるベクトルに従って移動したときに その移動の軌跡の交点を調べたい(同時にその点を通過しなくてもよい) ということですか? あるいは 平面上を二つのキャラクターがあるベクトルに従って移動したときに その移動の軌跡が交わるかどうか判定したいということですか?
あと 平面上なのになぜyとy2だけを考えているのですか? xとx2は考えないのですか?
# 出来れば、さらに具体的な情報が欲しいです。
|
No.55527 - 2018/12/13(Thu) 04:51:21 |
| ☆ Re: / ガラくた屋 | | | 携帯から失礼します。なんどもすいません。 > 平面上を二つのキャラクターがあるベクトルに従って移動したときに > その移動途中にぶつかる(同時に同一点を通過する)かどうかを > 判定するということですか? はいその通りです。 もし通過してるなら同じ座標になる時間tが知りたいのです。 > あと > 平面上なのになぜyとy2だけを考えているのですか? > xとx2は考えないのですか? > こちらは書き忘れてましたすいません。 yでやろうとする計算をそのままxに置き換えてやろうと考えてました。 > # 出来れば、さらに具体的な情報が欲しいです。 同じ座標になったときに座標をベクトルの1の長さ分ずらすことも考えてます。 またキャラクター2体の座標と移動ベクトルの量によってtの数値がマイナスにならないようにしたいです。
|
No.55528 - 2018/12/13(Thu) 07:26:52 |
| ☆ Re: / らすかる | | | それならば、計算は基本的に y+tv=y2+twからt=(y2-y)/(v-w)で終わりです。 2乗するのは誤りです。 もしこの計算でtが負になったら、 「過去に一致していたことがある」というだけで 現在以降にはぶつかりません。 xに関しても同じ計算でtを出して、 両方のtが正で一致(浮動小数点なら誤差範囲内)したら そのtの時間に「ぶつかる」ということになります。
正確には、v=wの場合もありますので 場合分けして以下のように処理しないとまずいです。 キャラクター1が(x1,y1)から単位時間あたり(vx1,vy1)移動、 キャラクター2が(x2,y2)から単位時間あたり(vx2,vy2)移動するとして
(1)vx1=vx2かつvy1=vy2の場合 x1=x2かつy1=y2ならば、二つのキャラクターは 同じ場所を同じ方向に移動します。 これを「ぶつかる」と判断するかどうかは場合によります。 x1≠x2またはy1≠y2ならば、平行移動しているのでぶつかりません。
(2)vx1=vx2かつvy1≠vy2の場合 x1≠x2ならばぶつかりません。 x1=x2の場合はt=(y2-y1)/(vy1-vy2)を計算し、 tが正ならばそれがぶつかる時間、 負ならば(現在以降は)ぶつかりません。
(3)vx1≠vx2かつvy1=vy2の場合 y1≠y2ならばぶつかりません。 y1=y2の場合はt=(x2-x1)/(vx1-vx2)を計算し、 tが正ならばそれがぶつかる時間、 負ならば(現在以降は)ぶつかりません。
(4)vx1≠vx2かつvy1≠vy2の場合 tx=(x2-x1)/(vx1-vx2) ty=(y2-y1)/(vy1-vy2) によりtx,tyを算出し、 もしtx=ty>0なら(浮動小数点の場合は誤差を考慮) それがぶつかる時間、 そうでないときぶつかりません。
|
No.55529 - 2018/12/13(Thu) 09:49:44 |
| ☆ Re: / ガラくた屋 | | | 質問に答えてもらいありがとうございます。 変にこだわって難しく考えてしまっていたのですね。 (1)から(4)の場合もよく読んでプログラムに適応させてみます。 またわからないところがあったらお願いするかもしれませんが、その時はよろしくお願いします。
|
No.55530 - 2018/12/13(Thu) 14:54:33 |
| ☆ Re: / らすかる | | | 一つ書き忘れましたが、 もしvx1,vx2,vy1,vy2が浮動小数点型でしたら 「vx1=vx2」の判定時も誤差を考慮するようにご注意下さい。 vx1とvx2が「ほぼ同じ」(例えば差が10^(-10)とか)であるとき、 vx1≠vx2と判定して(4)で計算してしまうと、 txが巨大な値になってしまって正しく判定できないことになります。 vy1=vy2,x1=x2,y1=y2の判定も同様です。 整数型であればこのような処理は不要です。
|
No.55531 - 2018/12/13(Thu) 18:17:31 |
| ☆ Re: / ガラくた屋 | | | わかりました。ありがとうございます 誤差を考慮して計算してみます
|
No.55533 - 2018/12/13(Thu) 19:03:48 |
|