Encounter Knot 800

タイトルとかけ離れたモチベーションで華麗(※注 決して早い訳ではない)な更新頻度を発揮するかもしれない趣味的ブログ?

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 |

Kasperskyの相性発覚?

カテゴリが少々違う気がするがキニシナイ。

(20090916追記)リカバリしてインスコしたら全てまともに動きました

この前、実家サーバ(といってもWinXpProが動いてる普通のPC)にKaspersky Anti-Virus 2009をインストールしていたのだが、インストール完了後に再起動を要求され再起動してみると、

VC++ランタイムエラー
(カスペ)データベースが破損しています云々
(カスペ)修復してください云々

その他プログラム大勢のエラー

など、諸々がエラーってた。
定義ファイルをアップデートすると辛うじてファイルアンチウイルスだけは稼動したが、壊滅的。
しかも再起動するとまた飛ぶのな。

HDD異常を疑ったがそうではなく、カスペをアンインストールすると元に戻った。
で、セーフモードとかで起動するとどうも大丈夫そうで、
結局システム構成ユーティリティからスタートアップを切に切って、なんとかそれらしく起動するようになった。

主にインテルのグラフィックスあたりとIME関連が競合関係にあったような気がしたが切っても起動毎に立ち上がったりしていたのでほとんどを切ることにした。

今度リカバリしてインストールしてみます。

システム構成
DELL Inspiron 530
OS:Win XP Pro
CPU:C2D E4500 2.2GHz
MEM:1GB
MOTHER:FOXCONNの何か たぶんG31(かG33)

最初UPSもエラって保護できませんと言われ、現在は元に戻ったが(OS的に)休止状態に移行できないので、シャットダウンで対応とな。
プログラム的なもの | コメント:2 | トラックバック:0 |

スタックオーバーフロー

下記のようなプログラムを書いていて、

#include
#define N 250

int main()
{
  double a[N][N];
  (以下略)
}

define のところでNの値を2500にすると、エラーで落ちていた。(コンパイルはできた)
Nの値を小さめにすると問題ないので、メモリ関係でなにかなっているとは思ったが、mallocとかを使えば問題ないのではないかと思い、が、面倒なので利用せず、ググってたら、

スタックオーバーフロー

だったようです。研究室仲間も101×101の二次元配列を大量に宣言してたら落ちてたようで、これに該当してたようだ。 VisualStudioは標準で1MBらしい。

250×250のdoubleだと、(doubleを64ビットとする)
250×250×64÷8=500000
500000÷1024=約488KBなので辛うじてセーフだが、

2500×2500だと、100倍になるので約4.88MB……こりゃオーバーするわww

で、解決方法は、main文の外に書いてやると良いそうです。(グローバル変数扱い?)

上のプログラムを書き換えるとこうね。
#include
#define N 2500

double a[N][N];

int main()
{
  (以下略)
}

エラー吐かなくなりましたw
別の研究室の先生に解決法聞いたっていう。
プログラム的なもの | コメント:2 | トラックバック:0 |

CLOCKS_PER_SEC

学校の実験でVMWare Player上でKNOPPIX 4.0を動かしていて、そこでC言語を使ってプログラムを動かしていたんだけど、時間を計測するにあたって、時分はgettimeofday関数を利用して作成、
とある別の班の人がclock関数で、CPU時間を利用し、CLOCKS_PER_SECで割って時間を算出していたのだが、

時間の進み方が非常に遅かった。

ググってKNOPPIX弄ってみたりしたが変らず、gettimeofdayを使ってもらってそれらしく計測できたというそれだけの話。

VMWare上で動かすと、ゲストOSが取得しているCPUクロックと、実クロックが(SPEEDSTEPやC'n'Qによりクロックが変動するため)異なるかららしい。CPU使用率に応じて動作が変わってたようだ。

ただ、gettimeofdayもなんだかんだで、最初のうちは安定していなくて、なぜか2秒ごとにしていたのに0.5秒で出力していたりした。 ……何秒かしたら安定したけど。

プログラムでファイル出力させるの忘れてて20分パーにした班があったっていう。
プログラム的なもの | コメント:2 | トラックバック:0 |

K○○○MI COMBAT Z○○O

タイトルが伏字有なのはリアルで公開したことがあったためですはい。

長らくプログラム的更新はしていなかったが、近いので。

戦闘機の3面図を検索したらwikipediaあたりで、拾ってくることができたので、以前のsu27及びF15に限らず製作すれば飛行させられる状態になった。  …グリペンがなかったのは悲しかったが。

できてくれば公開するかも。   数ヶ月かかるだろうし、その前に入試…。

>GW
巷で話題に上がってるGWですが、4月の祝日が平常授業となり、5月1日が休みになった。つまり、木曜の卒研を逃走すればその日の昼には着いてる算段。 
…諸事情によりそんなことしないけど。

不意の休講で時間が余ったから宿題あるのに更新してみたくなったっていうw
プログラム的なもの | コメント:0 | トラックバック:0 |

ミサイルの誘導(3D)

DirectXを用いて3Dシューティングゲームを作っている。期間対進度が微妙な上サンプルソース丸写しな面が一杯というw

3Dでのミサイルの誘導がググったりしても見つからなかったので一応ここで記述しておく。
(アペルジオの検索能力が低いせいかもしれないが)

最初のうちは回転行列から(無理やり)ミサイルの今向いているワールド座標系での角度を算出し、敵とミサイルとのベクトルの差を使ってasin、acos、atan2あたりでミサイルの向くべきワールド座標系の角度を求め、大小比較でYawとPitchを(たまにRollも)変化させていたが、あまりに難解かつバグだらけだったので他の方法を模索、結果、
敵とミサイルとの差のベクトルをミサイルのローカル座標に適用してx,y,zの値の大小で、左右、上下、前後を判定した。

こんな感じ↓
D3DXMATRIX ac;//代入用
D3DXVECTOR3 Enemy;//敵のローカル座標での位置
D3DXQUATERNION qtr;//代入用
//ミサイルの回転行列からクォータニオンを抽出
D3DXQuaternionRotationMatrix(&qtr,ミサイルの回転行列のポインタ);
//クォータニオンから回転行列を生成
D3DXMatrixRotationQuaternion(&ac,&qtr);
//逆行列を計算(ローカル座標→ワールド座標な回転行列をワールド→ローカルな回転行列に)
D3DXMatrixInverse(&ac,NULL,&ac);

//敵とミサイルとの座標差をミサイルのローカル座標に変換
D3DXVec3TransformCoord(&Enemy,&vectr,&ac);

Enemyにミサイルのローカル座標での敵の位置が入るので、
Enemy.xの値でミサイルを右(x > 0)左(x < 0)(Y軸中心回転)に振り、
Enemy.yの値でミサイルを上(y > 0)下(y < 0)(X軸中心回転)させ、
Enemy.zの値でミサイルの前(z > 0)か後ろ(z < 0)にいるかが判定できます(たぶん)

もしかしたらつづりとか間違ってるかもしれないし、どこかから引用したかもしれない。
何せ一部はだいぶ前に編集して放っておいたソース……。
画像なくてわかりにくいですね……すみません

プログラム的なもの | コメント:2 |
BACK| HOME |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。