正式公開版 Ver 1.1(99/10/5公開)
ビリヤードもどきです
ボールサンプル ver1.1をダウンロードする(Windows95/98/NT4用、LZH圧縮、104KB)
右クリックor左クリックで配置が初期化されます。
ボールサンプルVer1.1プログラムソースをダウンロードする(Windows95/98/NT4用、LZH圧縮、29KB)
10/8日 このページを作り直し
なぜかこのページがクラッシュしたので(笑)、作り直しました。前書いてあったことと少し違いがでてると思いますが、こんなもんだったのではないかと。技術的な細かい話はBBSの過去ログ参照。
10/5日 Ver1.1
ブレイクなどが変だというので、修正。イベント駆動型にしました。
10/4日 Ver1.0
BBSの方で、衝突に関する質問があったので、さくっと作成(作成時間、1時間)。主要部分はこんなんです↓
// 衝突処理
for (j = 0; j < BMAX; j++) {
for (i = 0; i < BMAX; i++) {
if (i < j) {
// 位置の差を求める
CVector3 vdp = bp[i] - bp[j];
// 球の中心間距離を求める
double dp = vdp.abs();
// 球の中心間距離が2R以下なら衝突
if (dp < R * 2) {
// 相対位置の単位ベクトルを求める
CVector3 ndp = vdp.norm();
// 相対速度を求める
CVector3 vv = bv[i] - bv[j];
// 球の中心を結んだ方向での相対速度を求める
double dv = vv.inprod(ndp);
// 接触位置からどの程度動いたか?
double bt = (R * 2 - dp) / -dv;
// 接触位置まで時間を戻す
bp[i] -= bv[i] * bt;
bp[j] -= bv[j] * bt;
// 反射処理
bv[i] += ndp * dv * -(1.0 + E) / 2.0;
bv[j] += ndp * dv * (1.0 + E) / 2.0;
}
}
}
}