C言語関係掲示板

過去ログ

No.206.(x,y)をwラジアンだけ回転する関数


No.1283

回転行列
投稿者---Cがわかりたい(2002/03/19 01:46:06)


#include<math.h>
Rotation (double x, double y, double w)
{ X=X*cos(w)+Y*sin(w)
Y=X*sin(w)+Y*cos(w) }

(x,y)をwラジアンだけ回転する関数を作ったつもりなんですけど
これってダメみたいなんで、誰かバグ取りしてください。
こまりました。。

No.1286

Re:回転行列
投稿者---かずま(2002/03/19 02:16:26)


間違いだらけですね。

(1) Cは、大文字と小文字を区別します。x と X は別物です。
(2) 文末にセミコロンがありません。
(3) 回転の公式の 一つ目は、+ でなく - のはずです。
(4) 二つ目の式で、すでに変更された x を使っています。
(5) 関数の引数を変更しても、呼び出し元の変数は変化しません。

#include <stdio.h>
#include <math.h>

const double PI = 3.141592653589793238;

void rotate(double *px, double *py, double w)
{
  double x = *px, y = *py;
  *px = x*cos(w) - y*sin(w);
  *py = x*sin(w) + y*cos(w);
}

int main()
{
  double x = cos(PI/6), y = sin(PI/6);

  printf("(%g, %g) --> ", x, y);
  rotate(&x, &y, PI/6);
  printf("(%g, %g)\n", x, y);
  return 0;
}


No.1290

Re:回転行列
投稿者---Cがわかりたい(2002/03/19 13:01:58)


ありがとうございます。
単純ミスなんかやってしまい、おはずかしいです。
がんばるぞー。

戻る


「初心者のためのポイント学習C言語」 Last modified:2002.05.26
Copyright(c) 2000-2002 TOMOJI All Rights Reserved