検索結果 164 件

by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: listクラスの要素にoperator[]を使ってアクセスできるようにしたい
返信数: 6
閲覧数: 3396

Re: listクラスの要素にoperator[]を使ってアクセスできるようにしたい

いちいちイテレーターを宣言して・・・ というのが面倒なのですよ。 vectorで途中の要素を削除するのには時間がかかりすぎるのでvectorでは代用しきれない部分があると思います。 イテレーターの件はVS2010ならautoを使うことによってほぼ無視できます。 for(auto it = l.bebin(); it != l.end(); ++it){   ~ } std::advanceという便利な関数もすでに用意されてたりします。 STLは完成度のハンパないライブラリなのでこの機能が超欲しいよってやつはたいていあります それからこれはどうでもいい話ですが、 組み込み型に毛が生えたようなク...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 1つの演算子に対して複数のオーバーロードはできない?
返信数: 3
閲覧数: 2060

Re: 1つの演算子に対して複数のオーバーロードはできない?

たとえば一つ目のオーバーロードの引数でstd::listのテンプレートパラメータが不足しています。 少なくとも自分の環境では error C2955: 'std::list' : クラス テンプレート を使用するには テンプレート 引数リストが必要です 1> 'std::list' の宣言を確認してください。 1> コンパイルされたクラスの テンプレート のインスタンス化 'slist<SLIST>' の参照を確認してください 1> with 1> [ 1> SLIST=int 1> ] と出るのですが・・・。 オーバーロード自体は何の問題もなくできるはずですよ。 実装がC++のコンベンション...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: C++クラスメンバ関数の関数ポインタの使い方
返信数: 10
閲覧数: 7399

Re: C++クラスメンバ関数の関数ポインタの使い方

どういう解決法をとるかによってやりたいことが変わってくると思います。 自分の思いつく限りだと ①ソルバークラスをテンプレートクラスにしてしまい、そのテンプレート引数で使用する関数オブジェクトを指定する ②そうでなく、ソルバークラスのソルバ関数本体を関数テンプレートにし、operator()をもつ(別にoperator()でなくてもよいですが要は同名の関数を持つ) 関数オブジェクトを引数にとるようにする。 ③関数オブジェクトをすべて同一の基底クラスから派生させ、ソルバー関数はその基底クラスのポインタをとるようにする。 基底クラスの仮想関数でf(x)にあたる関数を定義し、その実装を派生クラスでオー...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: ダイクストラ法について
返信数: 17
閲覧数: 7727

Re: ダイクストラ法について

roxion1377 さんが書きました:少し気になったんですが増加するコストが1の場合にダイクストラを適用した場合ダイクストラの恩恵は受けるのでしょうか?
それはroxion1377さんがダイクストラの恩恵というものをどうお考えかによると思います。
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: ダイクストラ法について
返信数: 17
閲覧数: 7727

Re: ダイクストラ法について

prevは最短経路ツリー用ですね。大丈夫です伝わっています。 問題はnextの候補を現在のノードから4方向に絞っていることだと思われます 出力結果の 33 34 35 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14  32 37 10 5 0 5 8 9 6 7 12 13 14 15 16 17 18 15 31 36 15 10 5 10 13 12 7 40 4599999999999999999999 21 16 30 359999 15 10 15 18 13 8 39 4499999999999999999999 22 17 29 34999999999999...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: お願いします
返信数: 17
閲覧数: 4828

Re: お願いします

どうしてもf(x)の不定積分が求まりませんでした。 ガウス関数の積分は0→∞の範囲でしたらうまくいくんですけどね。まんまガウス積分ですけど・・・ D(t) = { (x,y) | x^2 + y^2 ≦ t^2, x≧0, y ≧ 0 } E(t) = { (x,y)| 0≦x≦t, 0≦y≦t } D(t) ⊂ E(t) ⊂ D( (√2)*t ) より ∬[ D(t) ] { e^-(x^2+y^2) } dxdy ≦ ∬[ E(t) ] { e^-(x^2+y^2) } dxdy ≦ ∬[ D( (√2)*t ) ] { e^-(x^2+y^2) } dxdy ここで極座標形式 x =...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: ブロック崩しでの角と面の当たり判定
返信数: 4
閲覧数: 2590

Re: ブロック崩しでの角と面の当たり判定

取りあえずぱっと見で気になったのは //下に動いているときにブロックの上にぶつかったらY速度を反転 if( ballY+10>=i*20 && ballY+10<=i*20+20 && ballX+10>=j*20 && ballX<=j*20+20 && ballY>=0 ){ MAP[i][j]=0; field[i][j] = MAP[i][j]; ballVY *= -1; } //上に動いているときにブロックの下にぶつかったらY速度を反転 if( ballY>=i*20 && ballY<=i*20+20 && ballX+10>=j*20 && ballX<=j*20+20 && ...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: お願いします
返信数: 17
閲覧数: 4828

Re: お願いします

どっからどう見ても正規分布だと思うのですが。
ガウス分布、確率密度関数、この辺でググったら幸せになれると思いますよ。

何をやってるかですか?
ただの区分求積だと思いますね。
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 正弦波レーザーを作りたい
返信数: 5
閲覧数: 3391

Re: 正弦波レーザーを作りたい

いまいち仕様がよくわかりませんでしたがこういうことでしょうか? #include "DxLib.h" #include <cmath> char Key[256]; void CreateSinLaser( double* x, double* y, double speed, double angle, double amp, double phase ); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ if( ChangeWindowMode...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 直角三角形の鋭角を求めたい
返信数: 5
閲覧数: 2535

Re: 直角三角形の鋭角を求めたい

三角関数の逆関数を使えば解決すると思います。
この場合ならatanもしくはより便利なatan2を使えばよいかと。
double atan2(double y, double x);
でラジアンが求まります。
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: [雑談]ソースコード内のspaceの使い方
返信数: 16
閲覧数: 8440

Re: [雑談]ソースコード内のspaceの使い方

自分の場合「こうしよう」という大体の思いはありますが、よく崩れますorz 演算子については 基本: オペランドと演算子の間は1つスペースを空ける 例外: operator, は左側のオペランドに演算子をくっつける。 単項演算子はオペランドと離さない operator.とoperator->の両側は空けない 演算順序が左から右でないときは見やすさのためスペースを空けないことがある ex: d = a * a + b * b + c * c;  //読みにくい     d = ( a * a ) + ( b * b ) + ( c * c );  →d = a*a + b*b + c*c; その他...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: ブロック崩しにおけるあたり判定について
返信数: 3
閲覧数: 3476

Re: ブロック崩しにおけるあたり判定について

えっと、・・・コードで語ることにしましょう。 C言語でなおかつDxLibを使っていますが、大丈夫でしょうか? もしコードがCで書かれているゆえわからないところがございましたらまた聞いてください じぶんならこんな感じの実装にするでしょう。(簡単にするため余計なことはしていません) #include "DxLib.h" typedef double Point[2]; //長方形の構造体 struct AABB{ Point lt; //左上 Point rb; //右下 }; //円 struct Circle{ Point center; //中心 double r; //半径 }; //長方...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: GetColorで指定する方法 直接指定する方法
返信数: 7
閲覧数: 3620

Re: GetColorで指定する方法 直接指定する方法

softya(ソフト屋) さんが書きました:こう言うのは、試してみると早いです。
はははw全くその通りですね。大事なことを忘れていました。
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 当たり判定 すり抜け回避
返信数: 5
閲覧数: 6189

Re: 当たり判定 すり抜け回避

black_cat さんが書きました:というのは、ここまでの処理をしなくてもあまり目立たないということでしょうか?
そうですね。
この方法だといくつか書いていない問題点があります。
①スウィープすると応答(跳ね返りなど)の処理がめんどくさくなる
②よくある話ですが重い(座標変換に線分との判定がついて回りますので)

という感じです。ことは1/60秒に行われているので、よほどのことがない限り最初の線分の方法でエラーが目立たないと思うのです。
もちろん気になるのでしたら必要なことかもしれませんが・・・
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: GetColorで指定する方法 直接指定する方法
返信数: 7
閲覧数: 3620

Re: GetColorで指定する方法 直接指定する方法

あぁすみません。
DxLibのプロジェクトを直接読んでたんですけどNS_GetColorのelse以下を流し読みしちゃったみたいです。
どうやら16ビットの場合も補正してくれるみたいですね。ふつうにビットマスクかけてると思ったら現在のビット数を参照しているようでした。
GetColorを使ったほうがよいのですね。
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: GetColorで指定する方法 直接指定する方法
返信数: 7
閲覧数: 3620

Re: GetColorで指定する方法 直接指定する方法

GetColorを使った場合256色モードのときに一番近い色を自動的に選択してくれます
そうでないときは直接入力したものと同じ値が返ります
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 当たり判定 すり抜け回避
返信数: 5
閲覧数: 6189

Re: 当たり判定 すり抜け回避

いくらでも例外は考えられると思います まず一つ目として、ただ線分同士の交点を求めるのでは、ボリュームは全く考慮されていないことになります。 たとえば以下のような場合円のスウィープボリューム同士は交差しているにもかかわらず 中心点を結んだ線分同士は交差していません。これは明らかな判定の誤りです。 sweep.png また同時に上の例でスウィープしたボリュームを考慮したとした場合、本当に交差しているのか(またしたのか)の判断はつかないでしょう (時間の考慮がなされておらず、実際に衝突したか否かはこのフレーム内にどういう運動をしていたかに完全に依存する) 線分同士の交差を判定基準にするには あたって...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: for の条件
返信数: 6
閲覧数: 2277

Re: for の条件

簡単に言うと普通の電卓で(関数電卓じゃない電卓で)1/3*3が1にならないのと似たような理由です この手の誤差を回避するのに最も簡単な方法は 加算減算を整数で行うことです #include <stdio.h> int main(void) { double f; for(f=1.0; f<100.0;f=f+1.0) printf("%f ",f/10.0); return 0; } ほとんどすべての環境において doubleが1刻みで精度を保障する範囲はint型のカバーする範囲よりも大きいので、大体の場合はこれでうまくいきます よくある感じだとint型が2進数で31桁の整数があらわせますが、...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 坂道の当たり判定と座標の補正方法
返信数: 1
閲覧数: 1862

Re: 坂道の当たり判定と座標の補正方法

単純に食い込んだら真上に補正してやるのではだめなのですか?
判定の対象が円形のもので転がらせたいというのなら法線方向に補正してやるのが最適でしょうけれど
斜面に立たせたいというのでしたら真上に戻すだけでいいと思うのですがどうでしょうか?
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 課題が全く分かりません;
返信数: 11
閲覧数: 5519

Re: 課題が全く分かりません;

私は高校2年ぐらいの時に透視変換とかは行っていました。 CPUがZ80の時代でしたので、透視変換、クリッピングぐらいでしたが三角関数だけで行いました。 そのころは行列を使うとか全く知りませんでしたね。 なので、私としては高校生でもとんでもなく難しい問題とは思えないわけです。 透視変換に直接三角関数は必要ないと思うのですがいかがでしょう? 視野角もアスペクト比も適当でよいこの課題ではそれで何の問題もないですしね。 自分が難しいと感じているのはこの一文です ・視点を適当な世界座標(x, Y, Z)に置き、ここから世界座標の原点を見る。 これはどう考えても空間の原点移動と回転の処理が必要になります。
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 課題が全く分かりません;
返信数: 11
閲覧数: 5519

Re: 課題が全く分かりません;

道具としての三角関数は習っているのですよね? この種の応用にも使えないならば、何のために習っているのですか? まぁ3次元で三角関数をまともに扱かうのはそんなに簡単じゃないでしょうというのが自分の意見です。 行列使わずにできる自信は正直ないですね。で、その行列は高校の範囲外です。 おっしゃってるとおり、この質問自体は高校レベルでとけるかどうかは関係ないので、敢えてこだわることもないんでしょうけど、 仮にほんとに高校の知識だけで解こうとするとどうなるのかは若干気になるところではありますね。 単にz = f(x, y)の例として出しただけなのですが、無茶ぶりでしたか。。 いえ、自分はガウス関数の3...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 課題が全く分かりません;
返信数: 11
閲覧数: 5519

Re: 課題が全く分かりません;

>>たいちうさん ガウス関数っすか~ガウスフィルタにでも使うんですかね? そんなもん知ってる高校生はごくわずかだと思いますよ。 というかそもそも統計の範囲が消え去ってるので標準偏差とかも知らないわけですからね。 ましてや2変数関数とか。無茶ぶりってもんですよ。 頭のいい生徒ならおよそ関数がどんなものか予想できると思いますが、たとえ国公立大学に合格者をぼこすか出すような進学校の生徒でも 95%以上の生徒が何やってるか答えられないでしょうね~。 もはや本題とはそれてしまいますが、自分が思う一般的な高校生のレベルだと(というか2年前まで高校生やってたので大体あってると思いますが) ①3次元に関する知...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 課題が全く分かりません;
返信数: 11
閲覧数: 5519

Re: 課題が全く分かりません;

高校レベルの三角関数だけでも何とかなりそうな課題ですね。 まぁ一般的な高校生のレベルだと難しいんじゃないんですかね? 考えるのが面倒なのであれですが、三角関数だけでどうにかするのはめんどくさそうですし。 ビュー変換とか射影変換とか調べればごろごろ解説が出てくると思います。 また後ろに行列とつけて「ビュー変換 行列」みたいに調べればふつうに答えがヒットします。 このやり方だと行列の知識が必要になりますが、行列の演算方法だけ知っておけば後はコピペで行けると思いますよ。 まぁ少なくとも3次元の変換系の話に関しては、自分の場合めんどくさいので頭使って考えたりはしないですね 取りあえずイメージとしては...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: わからないのでどうかお得意な方、教えてください。
返信数: 15
閲覧数: 4782

Re: わからないのでどうかお得意な方、教えてください。

適当に書いたのでバグがあるかもしれませんm(_ _)m 言語は違うかもしれませんが、"参考に"どうぞ アルゴリズムはたぶん求めているものだと思います #include <iostream> #include <string> #include <ctime> #include <random> #include <map> #include <vector> #include <algorithm> using namespace std; const unsigned int SIZE = 4; int main(){ mt19937 engine((unsigned long)time(0...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: C++のオーバライド
返信数: 6
閲覧数: 3010

Re: C++のオーバライド

予想 最終的に printf("%d\n",saList[1].Get()); の行動が printf("%d\n",SaList[1]->Get()); と同じにしたいのですが。 2回目のsaList .Getでsbと表示したい。 sa *saList; //まずsaListはsaの並びであり、決してsbが並んでいるわけではない int main(){ //クラスのを作成(アドレスとびとび) SaList[0] = new sa(); SaList[1] = new sb(); //そのままの状態を表示 printf("%d\n",SaList[0]->Get()); printf("%d...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 磁力の力
返信数: 3
閲覧数: 2052

Re: 磁力の力

高校の教科書に載っていないのは磁石の話が実は難しいからです。
(磁石には必ずN極とS極がありこれが話をややこしくする)
さらに磁石同士の引力斥力でなく鉄と磁石だともっとややこしいので(鉄がどれくらい磁化するのかなど)
高校の教科書にはおそらくどこを探しても載ってないと思います

鉄じゃないといけませんか?
棒磁石同士とかなら若干話が簡単になるんですが・・・
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: rand関数 課題
返信数: 9
閲覧数: 3045

Re: rand関数 課題

>x=rand()%100000/100000.0; >y=rand()%100000/100000.0; 実際にどんな値がx,yにセットされているかを調べてみましょう。 一応補足しておきますが、ややこしいことにおそらくVisualStudioのステップ実行などを使ってしまうと一見正常に見えてしまうことでしょう (あくまでtime(NULL));が短時間の間にたくさん呼び出されることが問題となっているため) また環境によってはrand関数の位置を調整しても100000もループすればπの値に収束しないこともあり得ます。 (rand関数の乱数の質の問題により) randの質に目をつむった場合、簡...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: C言語の課題です
返信数: 3
閲覧数: 1882

Re: C言語の課題です

確かに許容誤差がおかしいw
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 角度を絞っての当たり判定ができません
返信数: 9
閲覧数: 2020

Re: 角度を絞っての当たり判定ができません

すみません if(abs(ene->rad[j]-bullet .rad)>(PI)) この判定の本来の意味はなんでしょうか? 具体的にはene->rad[j]であらわされるラジアンというのはどこから測った角度で bulletのものも同様にどこから測った角度で何を意味しているのでしょうか? 簡単な絵でもあれば助かります 角度に頼らずに背後からの判定をとろうとすれば、進行方向のベクトル同士の内積から正(背後から)か負か(正面から)かを判断する方法があります (弾が(x1,y1)の方向に進んでいて、敵が(x2,y2)の方向を向いているならx1x2+y1y2の符号で判定できます) 角度のみに頼るとな...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 二次元非定常膜の振動問題について。
返信数: 3
閲覧数: 1773

Re: 二次元非定常膜の振動問題について。

というかそもそも問題と初期条件と境界条件を求めよ
ということが合ってなくてどうしようもなかったり・・・
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 「雑談」 高校程度の数学
返信数: 6
閲覧数: 3190

Re: 「雑談」 高校程度の数学

ゲームを作るのに必要な数学って実はかなり偏ってますよね 自分が思うに確率統計なんてのは中学生知識でたぶん十分ですし、 平面幾何だって高1で学ぶメネラウスの定理とかチェバの定理とか必要になったためしがないですし。 微分積分とかも基本いらない気がします。(比較的高度な物理計算するならともかく、それでも高校の物理で微積は使わないですし) その一方3Dをやるとなると線形台数の知識は一気に大学レベルに跳ね上がりますよね。 というよりゲーム作るのに真に必要な数学の知識ってほとんど線形台数のものだと思います。 あとは代数学(いわゆる数Ⅰ)と、三角関数(数Ⅱ)と、(あくまで趣味レベルだと)簡単な整数論(これも...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: C++の勉強方法について
返信数: 3
閲覧数: 4177

Re: C++の勉強方法について

えっと入門サイトとかですかね? このサイトではあんまり紹介されているのを聞きませんが自分は ロベールのC++教室 が好きです(自分は本のほうも買って勉強しましたがサイトのものだけでもかなりボリュームがあります) ちなみに自分はCはさして書けずC++から始めた人間ですのでちょうどよかったですが、ポインタとかの項はつまんないかもしれません あとC++には標準テンプレートライブラリというものがありますが、それは結構なボリュームで大抵の本やサイトには収まってないので別途勉強したほうがいいと思います 自分は STL―標準テンプレートライブラリによるC++プログラミング 第2版 という本がおススメです。 ...
by GRAM
13年前
フォーラム: AIの可能性は無限大
トピック: 雑談
返信数: 4
閲覧数: 12366

Re: 雑談

入っておきながら何もしていないGRAMです・・・
日本語訳お疲れ様です

自分もしばらくしたら何か手伝いたいと思います
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 正方形の移動・回転
返信数: 5
閲覧数: 2674

Re: 正方形の移動・回転

こういう変換はアフィン変換というものです
プログラミングの話でもアルゴリズムの話でもなくほとんど線形台数の話ですが
数学的にはこの変換についてどこまで理解してらっしゃいますか?
そこがだいじょうぶならむしろ悩むところはそうないと思うのですが・・・
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: ソートの移動回数
返信数: 2
閲覧数: 1279

Re: ソートの移動回数

さて、まずは質問ですが
要素の移動とは何を指すのでしょうか?
このプログラムの場合行われているのは単純な移動ではなく要素の交換です
交換の回数を計ればよろしいのですか?それともほんとに要素が移動するたび数えるのですか?

さて、どちらにしても交換が起きている箇所(つまり少なくとも要素が移動している箇所)
では以下の動作をしています

①一時的に要素を保存
②保存の終わった要素にもう一方の要素を代入
③今代入を行った要素に保存しておいた要素を代入(これで交換が終わる)

こういう箇所を探してカウントしてみてください
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: クラスや構造体について
返信数: 3
閲覧数: 1738

Re: クラスや構造体について

現在はクラスと構造体の両方が混ざってるのですが、構造体はもう使わない方がよろしいのでしょうか? そんなことはないでしょう。 便利な時に便利なほうを使う。これでよいのではないでしょうか? メンバ変数をどうするか(publicにするかprivateにするか)によって使い分ければいいと思います。 (たとえば自分はベクトルや座標データなどそもそもデータを直接書き換えるようなものは構造体にしています。) ただpublic(protected)なメンバ変数とprivateなメンバ変数が同じクラス(構造体)に一緒にいるのは個人的には避けたいです publicには書かず、やはり全部privateかprote...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: sin,cosを使って円を書くプログラム
返信数: 14
閲覧数: 12829

Re: sin,cosを使って円を書くプログラム

べつに怒ってませんよww
そう見えますか?
上から目線で物を言ったつもりはないのですがね。
そう感じたなら申し訳ないです。
単純に円を描くにはどうしたらいいのかを考えてるのかなぁと思ったので方法を述べただけです。
勘違いだったみたいなのでそれはそれでよいですが
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: sin,cosを使って円を書くプログラム
返信数: 14
閲覧数: 12829

Re: sin,cosを使って円を書くプログラム

まぁ質問者さんの考えをそのままコードにするとこんな感じですかね? #include "DxLib.h" #include <math.h> static const double PI = 3.1415926535897932385626; int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDra...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 【意見募集】 新・ゲームプログラミングの館について 【雑談】
返信数: 43
閲覧数: 16122

Re: 【意見募集】 新・ゲームプログラミングの館について 【雑談】

ものすごくどうでもいいことですが コードに間違いがあります http://dixq.net/g/01_09.html の #include "DxLib.h" int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定 int x = 0; int Handle; // 画像格納用ハンドル Handle = LoadGraph( "画像/キャラクタ01.png" );...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: sin, cos の値がわかっている状態での角度のもとめかた
返信数: 12
閲覧数: 10095

Re: sin, cos の値がわかっている状態での角度のもとめかた

正確には失敗するのはa=b=0の時ですね。a=0だけでは失敗しないでしょう。
同じくminの存在意義はなんなんでしょう?(消し忘れただけ?)
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: sin, cos の値がわかっている状態での角度のもとめかた
返信数: 12
閲覧数: 10095

Re: sin, cos の値がわかっている状態での角度のもとめかた

dicさんの質問にそのままの回答をするとしたら標準の数学関数に
acos(コサインから0~πのラジアンへ)
asin(サインから-π/2~π/2のラジアンへ)

というものが存在します。 サインとコサインの符号から範囲を0~2πへ変換することも可能です
座標から角度を知りたいだけでしたらh2so5さんのおっしゃるatan2で十分です
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 敵を自機に向かせるプログラム
返信数: 4
閲覧数: 1777

Re: 敵を自機に向かせるプログラム

まずは角度の表現ですが、 atan2を用いる前提で考えます(つまり、x軸基準y軸方向正の回転、表現-180~180:説明の便宜上。実際にはラジアンで構わない) 要するに境界をまだぐことに失敗しているのだと思います。 解決法はいくつかありますが、角度のみに頼るやり方を提案します φを現在の敵の角度  Θを敵から自機への角度とすると φ=60 Θ=70は簡単で70-60=10度プラスすると求まるけれど たとえばφ=178, Θ= -178が問題の数字ですね ここから4度プラスするという解を導き出す方法を考えればいいわけです。 問題はこいつらが±180度境界をまたいでいることに集約されます。 境界を...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: データの重複チェックについて。
返信数: 4
閲覧数: 4540

Re: データの重複チェックについて。

非常に簡単な解決法としては 最初にchar型かbool型(C++)かなんか(別に何でもいいですが)100個分の配列を用意して それらを0(またはfalse)で初期化し、整数を入力されるたび その配列番号のところを1(またはtrue)に変えていけばよいでしょう 重複チェックは配列の要素が0か1かで判断できます(1ならば重複している) #include <stdio.h> char b[100]; int main(){ int n, end; do{ printf("0~99までの番号を入力 : \n"); end = scanf("%d",&n); if(n < 0 && n > 99){ p...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 自機から角度範囲に居る敵を取得する
返信数: 4
閲覧数: 3107

Re: 自機から角度範囲に居る敵を取得する

atan2にこだわる必要がないでしょう。
要は±15°の範囲にいればいいのですね。

でしたら先にtan15°を求めておいて、
自機中心の座標空間における(つまり自機が原点であらわされ、機首方向がy軸正となる座標空間における)
敵の位置がy > ±tan15° x かつ y > 0の範囲にいるかどうかを判定すればよろしいかと。

実際にはy > |tan15° x| かつ y > 0ですね。
自機の方向によっては座標変換が必要となりますが、通常これもさしたるコストがかからないため、
おそらくこちらのほうが高速であるとも思います。
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 文字型配列の指定文字の削除について
返信数: 8
閲覧数: 24900

Re: 文字型配列の指定文字の削除について

ちなみにですが、よりコンパクトにまとめることができます 実はcounterはなくなっても問題ありません、numXはその位置での個数を格納しているからです よって二つのwhileは一つに集約されます memsetもつかわないためもはやstring.hも必要ありません コードはこうなります。(直観性は幾分失われる気がしますが) #include <stdio.h> char str[] = "abcxdxxexfgxxx"; int main(){ int i = 0, numX = 0; do{ if(str[i] == 'x'){ ++numX; continue; } str[i-numX]...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 文字型配列の指定文字の削除について
返信数: 8
閲覧数: 24900

Re: 文字型配列の指定文字の削除について

アルゴリズムを正直にコードにすると以下のようになります(Cでのコードです) #include <stdio.h> #include <string.h> char str[] = "abcxdxxexfgxxx"; int main(){ int counter[100]; int numX = 0; int i = 0, j = 0; memset(counter,0,sizeof(counter)); do{ if(str[i] == 'x'){ ++numX; continue; } counter[i] = numX; }while(str[i++] != '\0'); do{ if(...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: ローカル変数って何?
返信数: 14
閲覧数: 6046

Re: ローカル変数って何?

ちなみにVisualStudioの場合、自分で作ったヘッダファイルであっても""でくくるよりも<>でくくったほうが楽ちんな場合があります
というのもインテリセンス君は、プロジェクト外部のヘッダをインクルードしようとするとき<>でくくってないと探してくれないからです。
逆にプロジェクト内部のヘッダをインクルードしようとすると""のほうが楽ちんです。
まぁあくまでもVSを使うのならの話ですけど。

そして完全に話がそれてますねw
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: C言語:誤差について
返信数: 9
閲覧数: 3935

Re: C言語:誤差について

いくつか混乱を招くような表現がありますので、(自分の理解があっているかどうかはわかりませんが) 問題と解決策を提示したいと思います。 まず23桁というのは2進数での小数点以下の桁ですね long doubleを使う等のはなしがありましたが、double(floatでさえも)通常23bit以上の仮数部の精度がありますから どうでもいいことだと思います。特にdoubleを使えば四捨五入の心配すらなくなることでしょう それから0.634567が二進表記可能かどうかもまた同様にどうでもいいことです。 双方とも精度には全く関係ありません さてでは何が問題なのか? ずばりsum += pow(10.0,-...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 回転の処理
返信数: 4
閲覧数: 2137

Re: 回転の処理

3次元における回転というものをどうとらえるか?という質問に置き換えられるでしょう。 3次元では二次元と違い回転軸というものが一意に定められません。 結局のところ、これを回避するためにたとえばx,y,z軸それぞれで何度回転させるのか? もしくはもっと直観的に、回転軸はどっちをむいていて何度回転させるのか? といったものを取ることになります。 この場合は後者の手法です。回転軸の方向ベクトルを指定してください、 ただし、「方向ベクトル」です。指定した方向の矢の先から見たとき、どっち周りになるかで決まります 方向を逆向きに指定してしまうと回転方向も逆になるためご注意を。 まぁこれは、確かめれば一発なわ...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: C++を学ぶにあたって
返信数: 2
閲覧数: 1463

Re: C++を学ぶにあたって

Cを理解しているのであれば 大雑把にSTLとクラス、テンプレートの3つでしょうか? STLではあまりに広いのでコンテナといくつかの入出力方法と、あとスマートポインタ等を使っていれば C++っぽく見えます。 C彼の決別という意味では、 配列の代わりとしてコンテナ ポインタの代わりとしてスマートポインタ マクロの代わりとしてのインラインテンプレート、const 系、enum 等 を使ってCから脱却すればさらにそれっぽく見えます あとはa5uaさんもおっしゃってる名前空間ぐらいですかね? 3つともボリュームたっぷりですが、それぞれが密接に関係しているので最終的には覚えざるを得ない感じですね 使おうと...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: DirectX習得にあたって
返信数: 9
閲覧数: 3069

Re: DirectX習得にあたって

もちろんネイティブのDirectXと比べるとできることは制限されます。 また使用しているDirectXのバージョンも古いため、今後ライブラリがバージョンアップしたとしても原理的にできないこともあります。 (もちろん使用しているDirectXのバージョンも上がればその限りではないですが) 自分はDirectX10を使ってますが、今のところ不便さを感じないのであればDXライブラリで十分だと思っています。 (自分の場合は単純に興味本位なので。) まぁ3Dをやろうとしない限りはむしろDXライブラリのほうがいいのではないでしょうか? エフェクト等の柔軟性に違いを感じますが、はっきり言うとDXライブラリを...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: プログラムを作るとき
返信数: 6
閲覧数: 3103

Re: プログラムを作るとき

アルゴリズムだとか数学や物理的な定理、言語使用やその他一般的なフレームワーク等はネットで調べたり本で見たりしますね 自分は本がメインです。本で基礎知識をある程度身に着け、さらにそれらを必要に応じて参照したうえでネットを参考にしてます。 ある程度著名な作者が書いた本などはやっぱり効率的に知識を得られますし、 UNさんがおっしゃったとおり、その道のプロが初めに考えてくれてることまでそれらを自分で考える必要はないと思います。 考えてもみましょう。かのガリレオガリレイでさえ、万有引力の法則は気づかなかったんです。 それを自分で思いつこうなど実質的に可能なのでしょうか?またそのレベルの現代の知識の量はい...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: C言語を勉強したい
返信数: 11
閲覧数: 4771

Re: C言語を勉強したい

自分はCではなくC++から始めた身なので、若干質問者の望む回答からはずれる可能性がありますが、 そこまで変わらないとして回答を・・・(まぁ自分もいって9か月目なんであんま大したことは言えないんですけどねw) ①高1でも学べる内容でしょうか? 高1ならば化学をやるのに数学がいるかという質問をイメージするとよいかと思います(わかりにくいっすかね) 結論から言えば、基本的な数学の知識(平方根や初等幾何程度の知識、ゲーム等を作るならベクトルも後々は知っといたほうがいいかもです)や、 その他ある程度の専門用語(メモリとかディレクトリとか)を知っといたほうが初めは楽でしょうが、別に知らなかったからと言って...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 衝突計算について
返信数: 7
閲覧数: 3230

Re: 衝突計算について

2Dにおける長方形同士の衝突にはh2so5さんの紹介した方法もふくめいくつか方法があります ①多角形の内側に頂点が存在するかをベクトルを使って判定する方法(h2so4さんの紹介のとおり) ② ①をちょっと変更して (i)まず1つの長方形の各辺が座標軸の方向となるように座標変換する (ii)もう一方の多角形の各頂点が座標変換後の空間で各軸に平行な長方形の内側にいるかを判定する(軸平行なので容易) ・・・さてh2so4さんのページの方法も②も実は完璧ではありません 具体的な例を図に表します 完全な方法は③「分離軸判定」というものを用いることで解決できます 分離軸判定についての簡単な説明は http...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 著書をプレゼントします [雑談]
返信数: 4
閲覧数: 2506

Re: 著書をプレゼントします [雑談]

面白そうな本だったので購入させていただきました!
いやいやどんな迷信が語られているのやら。
自分がどれだけそれに惑わされているのやら。
たのしみです・・・。
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 他の人からもらったフレームレートなのですが、
返信数: 2
閲覧数: 1518

Re: 他の人からもらったフレームレートなのですが、

コードタグでくくりましょうね^^;利用規約を一読お願いします // -------------------------------------------------------------------------------------------------------------- // // ------------------------------- フレームコントロール関係のグローバル変数の宣言 ------------------------------- // static DWORD g_dwFrameCount = 0; // フレームカウント用 static doubl...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 最大値を求めるのに・・・
返信数: 10
閲覧数: 4922

Re: 最大値を求めるのに・・・

while(ns < 11) { if(in[ns+1] >= in[ns]) { a = in[ns+1]; } ns++; } ここですね。ロジックを確認してみてください ns < 11でしょうか? ns = 0; if(in[1] >= in[0]) ns = 1; if(in[2] >= in[1]) ns = 3; if(in[3] >= in[2]) ・・・ ns = 9; if(in[ 10 ] >= in[9]) ns = 10; if(in[ 11 ] >= in[ 10 ]) ns<10でないというところまではいいですが考え方が増やすのと減らすので真逆になってますね
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: classで配列を宣言したときの初期化にて
返信数: 4
閲覧数: 16314

Re: classで配列を宣言したときの初期化にて

クラスという事はC++でしょうから
STLのstd::vector等のコンテナをつかえばよろしいのではないでしょうか?

例えばベクタならコンストラクタに
vector( 要素数, 初期化する値 )
とすればよいですし、要素ごとに違う値で初期化したければ
vector(iterator_begin、iterator_end)
という方法もあります。

どちらにしてもconstな配列を初期化できます
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 放物線
返信数: 5
閲覧数: 3315

Re: 放物線

放物線というよりかは鉛直投げ上げに近いのですかね? (表の座標が上向きの方向、つまりy座標になった場合) 放物線にするには横方向に等速に動かせばよいでしょう。 物体の動きをプログラミング言語で記述するには主に2つの方法があります ①ある時刻の物体の位置を数学的に割り出す ②物理的にシュミレーションする 前者の方法は等加速度運動の法則 y=V 0 t - 1/2 a t 2 (ここでV 0 は初速度(ここでは5)、aは加速度(ここでは-1)、tは時間です) ・・・を使えばよいでしょう 後者の方法はもうちょっと直感的です つまりtが1進むごとに (i)まず速度からから1を引き (ii)それから現在...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: アクションゲームの当たり判定について
返信数: 3
閲覧数: 3330

Re: アクションゲームの当たり判定について

やりたいこととロジックが対応していない気がします。 実際問題として「もしぶつかっているならぶつからない位置まで戻す」という事が正確に実現できているなら当たり判定の不自然さは解消されるのではないかと。 つまるところ現在の「戻す先」の決定を「現在の4隅の座標のみ」にゆだねていることが問題かと 実際の例を図示しますが、おっしゃったような例によらず戻すべき方向は「現在の速度」に完全に依存するでしょう。 (図だと、現在のフレームで青い位置にいるキャラクターはその時の速度によってオレンジ、緑、茶の方向へそれぞれ戻すのが自然) かといって速度方向にオブジェクトを戻していく実装は多少なりめんどくさいので、例え...
by GRAM
13年前
フォーラム: C言語何でも質問掲示板
トピック: 素数判定について
返信数: 13
閲覧数: 5005

Re: 素数判定について

およそ思ったところだけコメントします for(waru=0;waru<answer;waru++){//ここのインクリメントを止めるか  if(answer%waru++==0){ //ここのインクリメントを止めるべきでしょうね。 val=0;      //←valが使われませんね。ループから抜け出すにはbreakで十分です //もしもvalを使いたければ最初の初期化時にval = 1;としてfor(waru=0;val&&waru<answer;waru++)としたらよいのでは? cout<<"値は素数ではありません"; } } if(answer%waru++==1)  //coutが表...
by GRAM
13年前
フォーラム: 学生で集まってみる?
トピック: 学生ならではの・・・・
返信数: 12
閲覧数: 12566

Re: 学生ならではの・・・・

うーん
僕自身は勉強しすぎて後悔することもあると思いますが…。
結局のところ「後悔したくなかったら」の理論は死ぬまでずうっと続きますし。今しかできないことはありますが、長い目で見れば勉強はやる気になればいつでもできるわけで。
勉強ばっかりして知識ばかり蓄えても、それを使うすべというのは案外小中高でバカやってるなかで学ぶところもあると思いますよ!
例えばモールス信号を皆で覚えて、中学の時にテスト中カンニングしまくったのはいい思い出…


まあ当たり前のことですが要はバランスじゃあないですか?
by GRAM
13年前
フォーラム: 学生で集まってみる?
トピック: 皆の開発環境は?
返信数: 22
閲覧数: 17979

Re: 皆の開発環境は?

自分もVisualStudioです。
そして皆様のおかげでDreamSpeakという素晴らしい情報を手に入れました。明日さっそく大学で申し込んできます…。
そうしたらもうExpressEditionとはおさらばできるのでしょう!
ちなみにメモにはEmEditorを使ってます
by GRAM
13年前
フォーラム: 学生で集まってみる?
トピック: 自己紹介!
返信数: 56
閲覧数: 37420

Re: 自己紹介!

はじめまして。GRAMです。
最後のモラトリアムを満喫中の、大学一回生です。
大学に入って無駄に長い夏をどう過ごすか考えプログラミングを始めたところ、はまってしまったそんな人間です。
ゲーム作りはまだ勉強し始めたとこですが、なにぶん絵の才能がなくてモチベーションの低下に困っております(笑)
真剣に上達したいと思っています。
よろしくお願いします!

詳細検索ページへ移動する