[過去ログ] 物凄い勢いで誰かが質問に答えるスレ@ゲーム製作技術 (1001レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
403(16): 名前は開発中のものです。 [] 02/04/06 02:06 ID:FIHamsxG(1/2) AAS
数学板かもしれんけどとりあえずここで質問
底辺と高さがわかっている直角三角形の頂点角って
どうやって求めるんでしたっけ?
図解するとこう
↓ここの角度を
/| 底辺と高さから求めたい
/ |
/ |
/ ┌|
 ̄ ̄
406: 403 [sage] 02/04/06 03:09 ID:??? AAS
ありがとうござまーす!
407: 403 [] 02/04/06 03:31 ID:FIHamsxG(2/2) AAS
度々すいません
今度は頂点角θと斜辺cが既知の場合
底辺aと高さbは求められるんでしょうか?
c*cosθがbのようですけど・・・
408: 403 [sage] 02/04/06 03:34 ID:??? AAS
あ、a=√c^2-b^2かな・・・?
409: 403 [sage] 02/04/06 03:37 ID:??? AAS
自己解決しました
こういう時にsinを使うのか・・・アフォや
410(5): 403 [sage] 02/04/06 05:37 ID:??? AAS
いよいよ場違いかもしれませんが
重力定数G、紐の長さL、振れ角Rとしたとき
while(1)
{
v += -(G/L)*sin(R);
x += -v*cos(R);
y += -v*sin(R);
#Rの更新は省略
}
でかなり近い挙動をするんですが
これは振り子とは違うんでしょうか?
所詮ゲームだからそう見えりゃいいっちゃいいんですが・・・
あ、>390390(1): 名前は開発中のものです。 [sage] 02/04/04 15:41 ID:??? AAS
こんなかんじ
#include <stdio.h>
#include <math.h>
#define L0 1.0 //振子長さ
int main ()
{
double x=L0, y=0.0, vx=0.0, vy=0.0;
double dt=0.01, endTime=2.0, t=0.0;
int c=0;
while ( t < endTime )
{
vy -= 9.8 * dt;
double l = sqrt ( x*x + y*y );
double dx = x / l * ( L0 - l );
double dy = y / l * ( L0 - l );
vx += dx / dt;
vy += dy / dt;
x += vx * dt;
y += vy * dt;
if ( c % 10 == 0 )
{
printf ( "%3.1f[sec], (%3.2f, %3.2f), l=%f\n", t, x, y, l );
}
c++;
t += dt;
}
return 0;
}
さんがわざわざソース書いてくれたのに
無視してるようでゴメンなさい
413(2): 403 [sage] 02/04/06 08:38 ID:??? AAS
>411411(7): 名前は開発中のものです。 [sage] 02/04/06 08:11 ID:??? AAS
>>410
Rは水平軸との角度で,vは角速度ですかね?
冲=1.0で省略てな感じかな?
まっとうなのは以下のようになると思います
振子の中心のモーメント M = m g cosθ × L
振子の中心の慣性モーメント I = m L^2
よって角加速度 ωdot = M / I = g cosθ / L
あとは積分
while ( )
{
ω += 冲 * G * cosθ / L;
θ += dt * omg;
x = L * cosθ;
y = L * sinθ;
t += 冲;
}
これだと逆三角関数いりませんぜ
>無視してるようでゴメンなさい
オナニーして公開しただけですの気にしないで下さい
えーと、中心点の座標(ax,ay)とおもりの座標(px,py)だけわかっている状態で
振り子運動をさせたいんです
なので現在
function R() {
var x,y,result;//ローカル変数確保
x = ax-px;
y = py-ay;
result = atan(x/y);
return result;
}
function L() {
var x,y,result;//ローカル変数確保
x = (ax-px)*(ax-px);
y = (py-ay)*(py-ay);
result = sqrt(x+y);
return result;
}
として、>410のコードで動かしてます
それから振り子運動中に外力を加えたりしてるので
時間軸入れるとうまくいくかわからないので省略してます
>411の場合は初回だけ振れ角を出してやればいいのかな?
414(1): 403 [sage] 02/04/06 08:40 ID:??? AAS
あと>411で
ω += 冲 * G * cosθ / L;
なのに
t += 冲;
するのは何故ですか?
420(1): 403 [sage] 02/04/06 19:30 ID:??? AAS
>418418(2): 411 [sage] 02/04/06 12:23 ID:??? AAS
でこんな感じ
while ( )
{
//モーメント
M = mass * G * cosθ * L;
//外力Fが重心において回転方向に加わる場合
M += F * L;
//(Lを含まないこともあろうとあえてLは約分せず)
ω += 冲 * M / ( L^2 * mass );
θ += dt * omg;
x = ax + L * cosθ;
y = ay + L * sinθ;
}
と書きながら>>410が今やっと解りました(アフォ
でもやっぱ角速度と角度で管理したほうがよくないですか?
冲=1.0にしてθ=π/2 - R とすればほぼ同じ形になります
で,一つ違う所は,
× v += -(G/L)*sin(R);
○ v += -G*sin(R);
じゃないかな・・・
次元も合うし.冲=1.0で考えると前者のvは角速度ですよ(L=1.0なら別ですが)
なるほど・・・
ただ-(G/L)なのは振り子をこぐのに必要なんです
私もあきまさ氏のあぷろだを借りてUPしてみました
外部リンク[swf]:www.pureweb.jp
←キーと→キーが振り子を押す力
↑キーと↓キーでひもの伸び縮み
SPACEキーでおもり切り離し
ブランコをこぐ要領で、まず左右に押して
ある程度勢いがついたら∞を描くようにヒモを伸び縮みさせると
振り幅がどんどん大きくなります
↑の振り子エンジンは>410です
>411とかも試してみたんですが
自分の読解力が無いせいか、何故かうまくいかない
あと丸め誤差のせいなのか
ヒモ長が微妙にずれていく・・・
421: 403 [sage] 02/04/06 19:34 ID:??? AAS
あ、えーと>420はブラウザで開くとデカイ=重いなので
ダウンロードする事をおすすめします。
422(1): 403 [sage] 02/04/06 22:39 ID:??? AAS
マイナーバグフィクス
外部リンク[swf]:www.pureweb.jp
ヒモ長の狂いに法則がありました
角速度が一定以下だとどんどん縮んでしまい、
ある速度より大きくなると速度にほぼ比例して伸びていきます。
ただし角速度0だと安定
一体何が原因なんだろう・・・
振り子エンジンは>410>413
424: 403 [sage] 02/04/07 09:47 ID:??? AAS
>423423(1): 名前は開発中のものです。 [sage] 02/04/07 08:24 ID:??? AAS
>>422
なんも始まらんよ
playerが古いのかな...
すいませんFlashMXで作ってます・・・
425: 403 [sage] 02/04/07 09:49 ID:??? AAS
すいませんポインタ忘れてました
外部リンク:www.macromedia.com
427: 403 [sage] 02/04/07 11:52 ID:??? AAS
>426426(1): 名前は開発中のものです。 [] 02/04/07 10:32 ID:QkW4z/Hg(1) AAS
ひもと直角な方向の速度を何回も足してるわけでしょ
円を描く様にはなりませんよ
移動するたびにらせん状にひもは長くなる
そう言われれば速度の角度なんて考えてなかった・・・
けど、角度が小さいときに内向きの螺旋になるのは何故だろう?
428(1): 403 [sage] 02/04/07 23:15 ID:??? AAS
振り子エンジンを>418にしてみましたが
今度は楕円軌道を描きつつ内向きの螺旋になってしまいます・・・
なんかActionScriptの三角関数群自体に問題があるような気がしてきた
429: 403 [sage] 02/04/08 00:26 ID:??? AAS
>428
自己解決しました
楕円軌道だったのは
ヒモの長さLを関数オブジェクトにしてたせいでした
1:Lを元にXを更新
2:Lを元にYを更新
とやってたんで、そりゃあズレますわ
恥ずかしい・・・
でもやっぱり内向きの螺旋になります
430: 403 [sage] 02/04/08 06:15 ID:??? AAS
螺旋になる原因は
キャラクターの座標が1/100精度なのに
演算を1/100000000でやっていたせいでした
よく設計を見直してみたらLを動的に確保しなくても大丈夫だったので
無事円軌道を描く様になりました
無学な漏れにさんざんつきあってくれた411氏に感謝
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.033s