三途の川おさかなのブログ

だらだらしている

2022-03-02

嫁が 2 ヶ月ほど前にランジャタイのライブの DVD を購入したのだけど、中々見る元気が無くて置物と化していた。今日、ようやく見るに至った。笑えるけれど、エネルギーの消費量が多い。半分まで見て、残りはお預けにした。

Windows API + C 言語でミニゲーム作り。岩石同士の衝突判定周りの挙動が想定どおりになったのだが、コードが散らかっている。キレイにしたら、まとめて push しようと思ったが、いつまでも終わらなそうな気がしてきたので、強い心でゴミだらけのまま push した。
今日は理解を深めるために衝突判定のテストケースを書いていた。ゲームは 2 次元だけど、問題をより単純にするためにまずは 1 次元で起こりうるパターンを書き出してみた。それだけでお腹いっぱい。 下記はコード内にコメントを抜粋したもので、 1 次元上の a, b について
1. 重なる直前のフレーム
2. 重なった瞬間のフレーム
3. 2 の状態を、そのフレーム内でどう訂正するか
を書き出している。

// 静止してる a に b が突っ込むパターン.
// 1. b が半分めり込む:
// 対処: 両者が重なる直前の位置に巻き戻す + 移動ベクトルを反射する.
//  x: 01234567890123456789
// a1:    [a1]
// b1:         [b1]
// a2:    [a2]
// b2:     [b2]
// a3:    [a3]
// b3:        [b3]
//
// 2. b が半径以上めり込む.
// 対処: 両者が重なる直前の位置に巻き戻す + 移動ベクトルを反射する.
//  x: 01234567890123456789
// a1:    [a1]
// b1:         [b1]
// a2:    [a2]
// b2:   [b2]
// a3:    [a3]
// b3:        [b3]
//
// 3. すでにめり込んでて、動きが無い
// 対処: なにもしない
//  x: 01234567890123456789
// a1:    [a1]
// b1:     [b1]
// a2:    [a2]
// b2:     [b2]
// a3:    [a3]
// b3:     [b3]
//
// 4. b がすでにめり込んでて、両者の中点側に進もうとしてる:
// 対処案1: 反対側に位置補正、ベクトルも反射する
// 対処案2: ベクトルを反射する
//  x: 01234567890123456789
// a1:    [a1]
// b1:     [b1]
// a2:    [a2]
// b2:    [b2]
// a3:    [a3]
// b3:        [b3]
//
// 5. b がすでにめり込んでて、両者の中点の反対側に進もうとしてる:
// 対処案1: 進もうとしてる方向に位置補正
// 対処案2: ベクトル補正しない
//  x: 01234567890123456789
// a1:    [a1]
// b1:     [b1]
// a2:    [a2]
// b2:      [b2]
// a3:    [a3]
// b3:        [b3]

github.com

朝 おゆ
味噌カツ
豚丼
体重 58.1kg