【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21905

アナログ時計の短針を変化させたいのですが・・
投稿者---gouryella(2005/07/13 21:16:42)


まるっきり初心者なんで言葉足らずかもしれませんがもしだれかわかったらお願いします。
アナログ時計を作っています。idle関数を使って、時間の関数を更新して針を動かしています。
任意のキーを押すことで、世界の時間に短針を変化させたいのですが、次のようなプログラムを組んだら、そのキーを押しても短針が変化しません。
というか、変化はしているのですが、いったりきたりで、残像がうつってるように見えます。もちろんキーを離すと元に戻ってしまいます。
どうすればキーを押すだけで、世界の時間に変化させることができるのでしょうか? 

下に、その部分のプログラムを載せます。

void idle()
{
  time_t timer;
  struct tm *t_st;

  time(&timer);

  printf("現在時刻: %s\n", ctime(&timer));
 
  t_st = localtime(&timer);
  printf("月: %d\n",t_st->tm_mon+1);  /* 月は+1 */
  printf("日: %d\n",t_st->tm_mday);
  printf("時: %d\n",t_st->tm_hour);
  printf("分: %d\n",t_st->tm_min);
  printf("秒: %d\n",t_st->tm_sec);

  q1= -2*PI/60.0*(double)(t_st->tm_min);
  q2= (-2*PI/12.0*(double)(t_st->tm_hour))+(-2*PI/720*(double)(t_st->tm_min));
  q3= -2*PI/60.0*(double)(t_st->tm_sec);
   
  display();
}  

void keyboard(unsigned char key, int x, int y)
{
 printf("key %d\n", key);
  if(key=='任意のキー')q2=q2+(-2*PI/12); 
 
 display();
}

グラフィクス環境はopenGLを使っています。




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:アナログ時計の短針を変化させたいのですが・・ 21906 iijima 2005/07/13 21:43:49


No.21906

Re:アナログ時計の短針を変化させたいのですが・・
投稿者---iijima(2005/07/13 21:43:49)


かなり情報不足ですが、想像を交えて:

関数名からして、何のイベントも発生しないときは、idle関数が繰り返し実行されるようになっているのだと思われます。
idle関数の現在の定義は、ローカルの時刻を表示するだけのようですから、キーボードイベントが終了すると、またローカルの時刻に戻ってしまうということなのでしょう。
そうだとすれば、idle関数の中で、ローカルの時刻を世界の時刻に変換できるようにする必要があります。
時刻変換用のパラメータを用意し、keyboard関数でキーからの入力値に基づいてパラメータを設定し、idle関数内ではそのパラメータに基づいて時刻を変換するようにすればよいのではないでしょうか。


この投稿にコメントする

削除パスワード

No.21907

Re:アナログ時計の短針を変化させたいのですが・・
投稿者---gouryella(2005/07/13 23:17:05)


お答えありがとうございます。
申し訳ありません情報と知識不足で・・・。
はいたぶんidle関数は1/60[s]繰り返しになっています。
ホント申しにくいのですがバラメータとは何でしょうか??




この投稿にコメントする

削除パスワード

No.21908

Re:アナログ時計の短針を変化させたいのですが・・
投稿者---iijima(2005/07/13 23:38:28)


>ホント申しにくいのですがバラメータとは何でしょうか??

パラメータ(parameter)です。
辞書的な意味は「媒介変数:二つ以上の変数間の関数関係を直接に表示するかわりに、補助の変数を用いて、間接的に表示するとき、その補助の変数(三省堂大辞林第二版)」です。
「ローカル時刻と求めたい国の時刻の関係を表す変数」という意味で用いました。
例えば、ローカル(日本)と中国の時差は-1時間ですから、その関係を表すためのパラメータの値は-1、ということを意図しました。
プログラムとしては、時差を表すグローバル変数を用意しておき、keyboard関数では中国なら-1、米国なら○(アメリカとの時差を知らない^^;)などと設定し、idle関数ではローカル時刻からそれをプラスマイナスすれば良いでしょう。


この投稿にコメントする

削除パスワード

No.21909

Re:アナログ時計の短針を変化させたいのですが・・
投稿者---iijima(2005/07/13 23:49:33)


追記:

> プログラムとしては、時差を表すグローバル変数を用意しておき、

もちろん、デフォルト値(ローカル時刻の場合)は0です。


この投稿にコメントする

削除パスワード

No.21976

Re:アナログ時計の短針を変化させたいのですが・・
投稿者---gouryella(2005/07/17 02:01:01)


返事遅れてすいません!iijimaさんアドバイスのおかげで世界時間を動かすことが出来ました!本当にありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧