ページ 11

円周上の座標

Posted: 2010年10月30日(土) 21:44
by シラフ
剣で攻撃する動作をDrawRotaGraphで作り、あたり判定をつけたいのですが、
いい座標の求め方はないでしょうか。
宜しくお願いします。 画像

Re:円周上の座標

Posted: 2010年10月31日(日) 02:48
by うしお
剣の回転軸の座標を仮に(0,0)とし、
剣先の座標を(10,0)だとします

ーーー>
こんな剣の画像があったとして、

スクリーン座標で、
たとえば剣を時計回りにθ度回転させた後の剣先の座標は、
(10 * cosθ,10 * sinθ)となります

これでやってみてはいかがでしょうか? 画像

Re:円周上の座標

Posted: 2010年10月31日(日) 12:58
by Tatu
剣の描画について

剣のどこか一点を中心に回転させるのであれば
int DrawRotaGraph2(int x,int y,int cx,int cy,double ExRate,double Angle.
int GrHandle,int TransFlag,int TurnFlag = 0)
または
DrawRotaGraph2F
を使ってみるのはどうでしょうか?

x,yは回転中心の座標。
cx,cyは画像のどの部分を回転中心にするか。
以降はDrawRotaGraphの引数に同じ。

Re:円周上の座標

Posted: 2010年10月31日(日) 22:04
by シラフ
ということは

中心が(x,y)の場合
(x+10 * cosθ,y+10 * sinθ)
になるということですか。
画像

Re:円周上の座標

Posted: 2010年11月01日(月) 12:10
by うしお
はい、実際に試したり、
手で計算してみるとより分かるかと思います

Re:円周上の座標

Posted: 2010年11月01日(月) 17:49
by シラフ
sinとcosはどうやって求めるんですか。

Re:円周上の座標

Posted: 2010年11月01日(月) 20:18
by うしお
math.hをインクルードすることで使えるようになります

sin
http://msdn.microsoft.com/ja-jp/library ... 80%29.aspx
cos
http://msdn.microsoft.com/ja-jp/library ... 80%29.aspx

Re:円周上の座標

Posted: 2010年11月02日(火) 14:14
by シラフ
Cの勉強用にゲームを作っているのですが、Cでもできますか。

Re:円周上の座標

Posted: 2010年11月02日(火) 16:41
by うしお
出来る、出来ないで言えば当然できます
しかしこの質問は、

「手元に絵の具があります、これで風景画を描けますか?」
のような質問です

プログラミング言語はあくまで道具です
それを使ってゲームを作るのか、
画像処理のツールを作るのか、
数値計算に使うのか、
それはプログラムを組む人にゆだねられます

その上でゲームを作ることを選択するのも、とても楽しいことではないでしょうか

Re:円周上の座標

Posted: 2010年11月03日(水) 00:01
by シラフ
前の質問は、教えてもらったページに// C++ onlyと書いてあるところがあって、
使用例をためそうとしてもエラーになってしまったので、
Cでも使えるかどうかという意味です。
Visual C++ 2008です。

画像

Re:円周上の座標

Posted: 2010年11月03日(水) 00:14
by うしお
これは失礼しました(どおりで脈絡のないコメントだと思いました

math.hはC時代から使えるものです 画像

Re:円周上の座標

Posted: 2010年11月03日(水) 04:34
by Dixq (管理人)
最近sin,cosの使い方について動画を作ったのでよければどうぞ。あまり参考になる物ではないかもしれませんが^^;
[nico]http://www.nicovideo.jp/watch/sm12492903[/nico]

Re:円周上の座標

Posted: 2010年11月03日(水) 16:23
by シラフ
1>C:\Users\~~\~~\DxLib_VC\サンプルプログラム実行用フォルダ\Debug\DxLib_VC2008用.exe : fatal error LNK1120: 外部参照 1 が未解決です。


1>LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。



と出てしまうのですが、
どうすればいいでしょうか。

Re:円周上の座標

Posted: 2010年11月03日(水) 17:56
by うしお
win32アプリケーションの設定で
int mainと書いていたりしませんでしょうか?

リンカ→システム→サブシステム : Windows (/SUBSYSTEM:WINDOWS)

全般→文字セット : マルチ バイト文字セットを使用する

であれば、
int WINAPI WinMain(
    HINSTANCE hInstance, 
    HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, 
    int nCmdShow
);
のメイン関数を書く必要があります

もし、
全般→文字セット : Unicode 文字セットを使用する
であれば、
int WINAPI wWinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInst,
    LPWSTR lpCmdLine,
    int nShowCmd
);
となります
プロジェクトの設定を見直してみてください

また、プロジェクトのクリーンも試してみてください

Re:円周上の座標

Posted: 2010年11月03日(水) 21:51
by シラフ
ありがとうございます。
エラーがなくなりました。
何度もすいませんが、
http://msdn.microsoft.com/ja-jp/library ... 80%29.aspx 
はどんな時のsinをもとめているんですか。

Re:円周上の座標

Posted: 2010年11月03日(水) 22:11
by みけCAT
ページの下の方にある「使用例」のことですか?
そうでしたら、pi/2ラジアン、すなわち90度の三角関数を求めています。

この答えでいいのでしょうか?
-----
no.64583
>前の質問は、教えてもらったページに// C++ onlyと書いてあるところがあって
このC++ onlyというのは、同じ名前で複数の関数を定義する
C++だけの機能「オーバーライド」を使っているため、C言語にはこの関数は定義されていない
(一つ目の関数しかない)ということだと思います。
「使用例」も自分の環境では正常にコンパイル・実行できました。
Dev-C++4.9.9.2、コンパイラはデフォルトです。

誤字を修正しました。 画像

Re:円周上の座標

Posted: 2010年11月05日(金) 15:48
by シラフ
有難うございました。
解決しました。
とても分かりやすかったです。 画像