noocyte のプログラミング研究室 〜プログラムは楽しげに走らねばならない♪〜

3点の座標から簡単に角度と回転方向を求める.
(2・3・N次元,外積を用いる方法)

公開:2006/10/11(水)
最終更新:2016/04/03(日)

2010/09/13(月)

3点の座標 (2次元または3次元) から三角形の辺の長さ・角度, ベクトルの内積・外積などを自動的に計算する Excel ファイルを, DLmarket 様にて委託ダウンロード販売開始しました.


0.目次

  1. 問題 (2次元の場合)
  2. 解答
  3. 解説
  4. 注意
  5. 余談 (N次元の外積について)
  6. 2つのN次元ベクトルのなす角 (回転角) θと回転方向を求める.
    1. 角度だけを求める.(N次元,回転方向の情報なし)
    2. 角度+回転方向を求める.(2次元)
    3. 角度+回転方向を求める.(3次元)
    4. 角度+回転方向を求める.(N次元)
  7. 3点の座標から角度・距離・内積・外積などを計算する Excel ファイル
  8. サンプルプログラム (C言語)
    1. 外積を計算する関数・マクロ
    2. 3点の座標から角度と回転方向を求める.(2次元)
  9. 参考・関連図書
  10. サイト内関連ページ
  11. 外部へのリンク
  12. 更新履歴


1.問題 (2次元の場合)

下図において,線分 CP が点 C を中心に角度θ (-180°< θ < +180°) だけ回転した結果, 線分 CQ になったとする.3つの点の座標 C=(Cx, Cy), P=(Px, Py), Q=(Qx, Qy) が与えられたとき,この回転が右回りか左回りかを判別せよ.
(別の言い方をすれば,「C → P → Q → C は右回りか左回りか?」)

Y
↑
│          Q
│        /
│      /θ
│    C────P
│
O────────→X

2.解答

S  (Px - Cx) * (Qy - Cy) - (Py - Cy) * (Qx - Cx)

とする.S>0 なら左回り,S<0 なら右回り,S=0 ならば C,P,Q は一直線上にある.()

なお,この判別方法は,CP と CQ が同じ長さである必要はない.

θを求めたい場合はこちらへ.


3.解説

この問題を見て,逆三角関数 tan-1 (C言語では atan() や atan2()) を使って CP と CQ の角度をそれぞれ求め, 両者を比較しようと考えた方が多いのではないでしょうか. しかしこの問題では,角度そのものではなく角度差の符号を求めればよいので, 逆三角関数を使う方法よりも簡単で優れた,外積を使う方法を紹介します.

2つの2次元ベクトル A=(Ax, Ay), B=(Bx, By) の外積を次のように定義する.

A × B ≡ Ax * ByAy * Bx

ここで OA から OB への回転角をθ (-180°< θ < +180°) とする (下図). ただし OA から OB に回転する方向が左回りならば θ>0 とする. このとき,A×B = |OA| * |OB| * sinθ である.したがって,

Y
↑
│   B
│   / θ A
│  /  /
│ / /
│//
O───────→X

このように外積を使えば,2回の乗算だけですむので,(遅い) 逆三角関数サブルーチンを使う方法に比べて次のようにいいことずくめです.

また,2つのベクトルの回転角 (上記のθ) を求める場合には, 後述するように内積と外積を併用すれば簡単です. この場合も,2つのベクトルそれぞれの角度を求め, それらの差を計算しようとすると場合分けが必要になり厄介です.

なお,外積は3次元で使われることが多く, 「外積」で検索してもヒットするのは多分ほとんどが3次元の話だと思います. 3次元ベクトル同士の外積は3次元ベクトルになりますが, 2次元ベクトル同士の外積はスカラーになります.
(3次元外積において,元の2つのベクトルがXY平面内にある場合を考えれば, 外積のX,Y成分は0になる.そのためZ成分だけを考えればよく, それを2次元の外積と考えることもできる.)


4.注意

上の解答および解説で,「外積の値が正ならば左回り」と書きましたが, それはX軸およびY軸の方向が上の図のようになっている場合です. もしY軸が下向き (あるいはX軸が左向き) になっていれば回転の向きが逆になります.(注の注)

そこで一般的な言い方をすると,次のようになります.

OX が90°回転して OY になる方向を正回転とすると, 外積が正ならば正回転,負ならば逆回転.


5.余談 (N次元の外積について)

上の解説を読んで, 次のような疑問を持たれた方も多いでしょう.

(a) 「3次元ベクトル同士の外積は3次元ベクトルなのに, なぜ2次元ベクトル同士の外積は2次元ベクトルではなくスカラーなのか?」

あるいは,3次元外積だけを知っている人なら,次のように思われたかもしれません.

(b) 「えっ,2次元外積がスカラーってどういうこと?  そもそも外積って3次元以外で定義できるの?」

(a) のようになる理由は, 3次元の外積の定義を見るとわかりますが, 外積の1つの成分を計算するのに, 元の2つのベクトルの2つの座標軸の成分を使っていることにあります. 例えば3次元外積のX成分を計算するには, 元の2つのベクトルのYおよびZ成分を使います. 2つの座標軸の組合せごとに,外積の独立成分が1つ対応します. 外積の各独立成分は,N次元空間内の回転を, 2つの座標軸が張る平面に投影したものに対応していると考えられます.

したがってN次元ベクトル同士の外積には, NC2 個の独立な成分があります. 3次元ではたまたま 3C2=3 なのでベクトルとして表現できますし, 2次元ではたまたま 2C2=1 なのでスカラーとして表現できます.

一般のN次元では,ベクトル A=(A1, A2, …, AN) と B=(B1, B2, …, BN) の外積は,次のような N×N 行列で表現できます.
((楔形の記号∧から) ウェッジ積,(考案者名から) グラスマン積ともいう.)

A ∧ B = (Ai * Bj − Aj * Bi) =
0 A1 * B2 - A2 * B1 A1 * BN - AN * B1
A2 * B1 - A1 * B2 0 A2 * BN - AN * B2
: : : :
AN * B1 - A1 * BN AN * B2 - A2 * BN 0

実はこれが本来の外積の定義であり, ベクトルでもスカラーでもありません. 上の説明では「行列で表現」と書きましたが, 正確に言うと外積は2階のテンソルと呼ばれる量です. N階のテンソルとは,大雑把に言えば,「N次元の行列」のようなものと考えてください. 0階のテンソルはスカラー,1階のテンソルはベクトルです.

さらに正確に言うと,外積は2階の 反対称 擬テンソルです. 「反対称」というのは,上に書いた行列の行と列を入れ替えると (つまり転置行列にすると),符号が反転するということです. 「」とは,「右と左を入れ替える=座標系の向きを反転させる (奇数本の座標軸を逆向きにする,あるいは2本の座標軸を交換する) と, 向きが反転する」ことを意味します.


■注の注

上の「注意」で, 座標系の向きによって外積の符号に対応する回転の向きが変わるという意味のことを書きましたが, これは2次元外積が擬スカラーだからです. 同様に3次元外積は擬ベクトル (軸性ベクトルともいう) です.


■追記 (2010/02/10(水))

軸性ベクトルに関する詳しい説明.


6.2つのN次元ベクトルのなす角 (回転角) θと回転方向を求める.

6.1 角度だけを求める.(N次元,回転方向の情報なし) … 高校数学Bレベル

高校数学Bでは2〜3次元ベクトルしか習わないが,何次元だろうと (無限次元だろうと),ベクトル A=(AxAyAz,…) と B=(BxByBz,…) の内積の定義は,

幾何学的定義:A・B ≡ |A| * |B| * cosθ
代数的定義  :A・B ≡ Ax * Bx + Ay * By + Az * Bz + …

したがって A と B のなす角θは,

           A・B
cosθ = ────
          |A||B|

                    Ax * Bx + Ay * By + Az * Bz + …
      = ─────────────────────────
          √((Ax2 + Ay2 + Az2 + …)(Bx2 + By2 + Bz2 + …))

あとは逆三角関数 cos-1 を使うだけでθ (0°≦ θ ≦ 180°) が求まる. 2次元の場合は Az および Bz 以後を0とすればよい.

内積を使うと,何次元のなす角でも求められるが,回転方向の情報は得られない.

謎の検索ワード集

「Excel 内積」
Excel に内積「専用」の関数はありません.SUMPRODUCT 関数を使ってください.

■参考

「なす角 180度以上」「なす角 符号」
なす角は普通 0゚≦θ≦180゚ です.どういう問題なのかわからないけど, 回転角と間違えてませんか? 回転角ならば 180゚ 以上とか以下とかいう前に, まず回転方向を定義してください.

■参考

「内積 回転方向」
内積は回転方向とは全く関係ありません.
  • 2つのベクトル A,B の内積 A・B は,両者がが同じ方向を向いているほど大きくなるスカラー量です.同じ方向 (0°) のとき最大値 |A||B|,逆向き (180°) のとき最小値 −|A||B| を取ります.2次元では,回転方向は右と左の2とおりがありますが, 右90°も左90°も内積は0となり,右回転と左回転を区別することはできません.(A と B を入れ替えると回転方向は逆になるのに,内積は同じ値 (A・B=B・A) になります.)

    3次元以上では回転方向は無限にありますが, 角度が同じならば内積の値は回転方向にかかわらず全部同じになります.

  • 3次元の回転方向は,右手系では回転に対して右ネジの進む方向で表します. これはベクトルなので,(スカラーである) 内積では表せないことは明らかです.
  • 回転方向を求めるには,A と B を入れ替えると符号が反転する (=反対称) 演算を使う必要があります.(つまり外積)

「なす角 外積」
逆に「なす角 外積」で検索して来る人もいるけど,外積はなす角を求めるのには向いていません.
  • 「なす角」は普通 0°≦θ≦180°で,回転方向の違いは無視します. しかし外積は sinθ に比例するので,(回転方向を無視すると) 0°〜90°の範囲しか扱えません.(下の図を見ればわかるとおり) 外積 (だけ) では 0〜90°と 90〜180°を区別できません. (例えば45°と135°では sinθ の値が同じになるので,これらの角度を区別できない.)
  • 3次元以上だと外積はスカラーではなくベクトルやテンソルになるので, 計算が非常に複雑になります.(なす角が90°以内の場合であっても) 内積を使う方がはるかに簡単.

[画像:sinθ cosθ tanθ]

6.2 角度+回転方向を求める.(2次元)

時々,「なす角」,「角度」,「逆三角関数」,「atan2」 などで検索してくる人がいるのでおまけ.(2006/12/13(水))

2次元ベクトル A と B の内積および外積の定義を改めて書くと,

幾何学的定義:A ・ B ≡ |A| * |B| * cosθ
       A × B ≡ |A| * |B| * sinθ

代数的定義  :A ・ B ≡ Ax * Bx + Ay * By
              A × B ≡ Ax * By - Ay * Bx

なので,両者を併用すると簡単に角度および回転方向 (-180°< θ ≦ +180°) が求まる. C/C++ の場合は atan2(y, x) 関数,C# の場合は Math.Atan2(y, x) を使うと,

θ = atan2(A×B,A・B) (単位はラジアン,引数の順序にも注意)

Excel の ATAN2(x, y) 関数はCの atan2(y, x) とは引数の順序が逆なので,

θ = ATAN2(A・B,A×B)
[画像:sinθ cosθ tanθ]

■参考

6.3 角度+回転方向を求める.(3次元) … 大学1年の物理数学レベル

3次元ベクトル A と B の外積 (ベクトル積,クロス積ともいう) A×B の定義は,
大学1年レベルの力学,電磁気学,物理数学の教科書にデカデカと書いてあるはず (ただしほとんど右手系限定).
最近では,3DCG やゲームプログラミングの本 (の一部?) でも解説されている.

「外積 求め方」などで検索して来る人が多いけど, 教科書読んだことがないんだったら何で「外積」という言葉を知ってるの? (激謎)

幾何学的定義:|A × B| ≡ |A| * |B| * sinθ    (0°≦ θ ≦ 180°)
              回転に対する A × B の向きは,座標系が右手系ならば右ネジの進む方向,
              左手系ならば左ネジの進む方向.(A:親指方向,B:人差し指方向,A×B:中指方向)

代数的定義  :A × B ≡ (Ay * Bz - Az * By, Az * Bx - Ax * Bz, Ax * By - Ay * Bx)

θを求める方法として,2次元の場合と同様に外積と内積を併用することも可能だが, 3次元では計算式が複雑になるだけでメリットが (たぶん) ないので, 6.1 の方法を使う方がいいと思う.

回転方向については,A×B 自体がその方向を表しているのでそのまま使ってもよいが, 単位ベクトルにする必要がある場合には正規化して A×B / |A×B| とすればよい.

6.4 角度+回転方向を求める.(N次元)

注意:4次元以上の回転についてちゃんと考えたわけではないので, この節に書いてあることを読む前に,眉に唾をベットリとつけてほしい.(笑)

まず回転角 (なす角) は,何次元であろうが 6.1 の方法で求めることができる.(これは間違いない.)

余談 (N次元の外積について)」 に書いたことと2〜3次元の回転から類推すれば, N次元でも次式が成立するはずである.

|A ∧ B| = |A| * |B| * sinθ    (0°≦ θ ≦ 180°)

ただしN次元外積テンソル A∧B の「長さ」は次のように定義する.

|A ∧ B| ≡ √ (Σ (Ai * Bj - Aj * Bi)2)
               i<j

         = √ ((1/2) ΣΣ (Ai * Bj - Aj * Bi)2)
                       i j

3次元と同様,A∧B 自体がその「回転方向」を表しているが, これを正規化すれば A∧B / |A∧B| となる.


7.3点の座標から角度・距離・内積・外積などを計算する Excel ファイル

3点の座標 (2次元または3次元) を入力するだけで,自動的に次の値を計算する Excel ファイルを,DLmarket 様にて委託ダウンロード販売しています.


Triangle2D.xls (2次元用) \308
Triangle3D.xls (3次元用) \514
2次元用 + 3次元用 (セット割引) \617

Triangle2D.xls (2次元用)

2次元用 Excel 画面

Triangle3D.xls (3次元用)

3次元用 Excel 画面


8.サンプルプログラム (C言語)

7.1 外積を計算する関数・マクロ

/*─────────────────────────────────────
機能  :2つのベクトルの外積成分を計算する.
入力  :(1) vector1,vector2:ベクトル (構造体のアドレスまたは配列).
        (2) component1,component2:ベクトルの座標成分.ベクトルが構造体の
            場合はメンバ名,配列の場合は成分番号 (添字).
戻り値:外積 vector1∧vector2 の (component1,component2) 成分.
2009/03/13(金) 作成
─────────────────────────────────────*/
// ベクトルが構造体の場合
#define CrossProductComponentS(vector1, vector2, component1, component2) \
  ((vector1)->component1 * (vector2)->component2 - \
   (vector1)->component2 * (vector2)->component1)

// ベクトルが配列の場合
#define CrossProductComponentA(vector1, vector2, component1, component2) \
  ((vector1)[component1] * (vector2)[component2] - \
   (vector1)[component2] * (vector2)[component1])

/*─────────────────────────────────────
機能  :2つのn次元ベクトルのウェッジ積 (外積テンソル)を計算する.
        無駄な計算を避けるため,独立成分のみ求める.
入力  :(1) vector1[0 〜 n-1],vector2[0 〜 n-1]:n次元ベクトル (配列).
        (2) n (≧2):ベクトルの次元.
出力  :wedgeProduct[0 〜 nC2-1]:ウェッジ積 vector1∧vector2 の独立成分の配列.
注意  :n=3 の場合,wedgeProduct[] の要素の順序および符号は,通常の3次元
        外積の定義とは異なる.だから「3次元外積のプログラムを作成せよ」と
        いう学校の課題でこれを丸写ししてもダメよ.(笑)
2009/03/13(金) 作成
2013/01/14(月) 改名 (VectorN_CrossProduct → VectorN_WedgeProduct)
─────────────────────────────────────*/
typedef double VectorComponent_t; // ベクトルの成分の型

void VectorN_WedgeProduct(VectorComponent_t wedgeProduct[/* nC2 */],
                             const VectorComponent_t vector1[/* n */],
                             const VectorComponent_t vector2[/* n */],
                             unsigned n)
{
  unsigned i, j;

  for(i = 0;  i < n;  i++) {
    for(j = i;  ++j < n;  ) {
      *wedgeProduct++ = (VectorComponent_t)CrossProductComponentA(vector1, vector2, i, j);
    }
  }
}

7.2 3点の座標から角度と回転方向を求める.(2次元)

#ifdef _MSC_VER
#define _USE_MATH_DEFINES // Visual C/C++ では,M_PI を使うのにこれが必要.
#endif /* _MSC_VER */
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

// ラジアンを度に変換する.
#define RadianToDegree(radian)    ((180 / M_PI) * (radian))

// 度をラジアンに変換する.
#define DegreeToRadian(degree)    ((M_PI / 180) * (degree))

// ベクトルの成分の型
typedef double VectorComponent_t;

// 2次元ベクトル
typedef struct {
  VectorComponent_t x, y;
} Vector2_t;

// diff ← ベクトル v1 - v2
void Vector2_Diff(Vector2_t *diff, const Vector2_t *v1, const Vector2_t *v2)
{
  diff->x = v1->x - v2->x;
  diff->y = v1->y - v2->y;
}

// ベクトル v1 と v2 の内積 (v1・v2) を返す.
VectorComponent_t Vector2_DotProduct(const Vector2_t *v1, const Vector2_t *v2)
{
  return v1->x * v2->x + v1->y * v2->y;
}

// ベクトル v1 と v2 の外積 (v1×v2) を返す.
VectorComponent_t Vector2_CrossProduct(const Vector2_t *v1, const Vector2_t *v2)
{
  return v1->x * v2->y - v1->y * v2->x;
  // return CrossProductComponentS(v1, v2, x, y); でもよい.
}

// ベクトル C→P と C→Q のなす角θおよび回転方向を求める.
int main(void)
{
  Vector2_t c, p, q;   // 入力データ
  Vector2_t cp;        // ベクトル C→P
  Vector2_t cq;        // ベクトル C→Q
  VectorComponent_t s; // 外積:(C→P) × (C→Q)
  VectorComponent_t t; // 内積:(C→P) ・ (C→Q)
  double theta;        // θ (ラジアン)

  // c,p,q を所望の値に設定する.
  c.x = 1;
  c.y = 2;
  p.x = 2;
  p.y = 3;
  q.x = 3;
  q.y = 5;

  // 回転方向および角度θを計算する.
  Vector2_Diff(&cp, &p, &c);          // cp ← p - c
  Vector2_Diff(&cq, &q, &c);          // cq ← q - c
  s = Vector2_CrossProduct(&cp, &cq); // s ← cp × cq
  t = Vector2_DotProduct(&cp, &cq);   // t ← cp ・ cq
  theta = atan2(s, t);

  // 結果を出力する.
  printf("C=(%G, %G)\n", c.x, c.y);
  printf("P=(%G, %G)\n", p.x, p.y);
  printf("Q=(%G, %G)\n", q.x, q.y);
  printf("θ=%Gラジアン (%G度)\n", theta, RadianToDegree(theta));
  if(s == 0.0) {
    printf("3点 C,P,Q は一直線上にある。\n");
  } else {
    printf("C→P→Qは%s回り。\n", (s > 0.0) ? "左" : "右");
  }

  return EXIT_SUCCESS;
}

実行結果:

C=(1, 2)
P=(2, 3)
Q=(3, 5)
θ=0.197396ラジアン (11.3099度)
C→P→Qは左回り。

9.参考・関連図書

【送料無料】AndroidゲームプログラミングA to Z

楽天で買う
価格:4,830円(税込、送料別)

Androidゲームプログラミング A to Z
Mario Zechner
インプレスジャパン
売り上げランキング: 26792



【送料無料】細野真宏のベクトル「平面図形」が本当によくわかる本

楽天で買う
価格:1,155円(税込、送料別)




【送料無料】細野真宏のベクトル「空間図形」が本当によくわかる本

楽天で買う
価格:1,155円(税込、送料別)




【送料無料】志田晶のベクトルが面白いほどわかる本

楽天で買う
価格:1,365円(税込、送料別)

決定版 志田晶の ベクトルが面白いほどわかる本
志田 晶
中経出版
売り上げランキング: 43835












イラスト・図解 はじめての行列とベクトル
長谷川 勝也
技術評論社
売り上げランキング: 220444



【送料無料】なるほど高校数学ベクトルの物語

楽天で買う
価格:788円(税込、送料別)

なるほど高校数学 ベクトルの物語 (ブルーバックス)
原岡 喜重
講談社
売り上げランキング: 229182



【送料無料】なるほど高校数学三角関数の物語

楽天で買う
価格:788円(税込、送料別)

なるほど高校数学 三角関数の物語 (ブルーバックス)
原岡 喜重
講談社
売り上げランキング: 158574



【送料無料】なっとくするベクトル

楽天で買う
価格:2,835円(税込、送料別)

なっとくするベクトル (なっとくシリーズ)
小野寺 嘉孝
講談社
売り上げランキング: 122943



【送料無料】なっとくする行列・ベクトル

楽天で買う
価格:2,835円(税込、送料別)

なっとくする行列・ベクトル (なっとくシリーズ)
川久保 勝夫
講談社
売り上げランキング: 172378



【送料無料】内積・外積・空間図形を通してベクトルを深く理解しよう

楽天で買う
価格:1,575円(税込、送料別)




ベクトル・行列がビジュアルにわかる線形代数と幾何
江見 圭司 江見 善一
共立出版
売り上げランキング: 158714



【送料無料】行列とベクトルのはなし

楽天で買う
価格:2,100円(税込、送料別)

行列とベクトルのはなし―線形代数の基礎
大村 平
日科技連出版社
売り上げランキング: 248023



キーポイント行列と変換群 (理工系数学のキーポイント (8))
梁 成吉
岩波書店
売り上げランキング: 279365
おすすめ度の平均: 5.0
5 素晴らしい本です。ぜひ1冊持っていたい本です。
5 群論への橋渡しに。
5 群論への橋渡しに。
5 群論の入門、線形代数の応用の学習に最適



【送料無料】3次元CG入門第2版

楽天で買う
価格:2,730円(税込、送料別)

C++による簡単実習 3次元CG入門
小笠原 祐治
森北出版
売り上げランキング: 285345

理論的な説明 + サンプルプログラム.




ゲーム開発のための数学・物理学入門  Beginning Math and Physics for Game Programmers
Wendy Stahler
ソフトバンククリエイティブ
売り上げランキング: 57346
おすすめ度の平均: 4.0
5 数学が嫌いなのにプログラマになった?
1 高校で習う内容
4 C言語と
3 導入書なので仕方ないとは思いますが・・・
5 3Dのゲームと数学



実例で学ぶゲーム3D数学
Fletcher Dunn Ian Parberry
オライリージャパン
売り上げランキング: 5010
おすすめ度の平均: 4.5
3 内容はいいのだが
5 類書との違いは具体的なコードが載っていること
5 タイトルに偽りなし



ゲームプログラミングのためのリアルタイム衝突判定
Christer Ericson
ボーンデジタル
売り上げランキング: 64052
おすすめ度の平均: 4.5
3 多くの情報への窓口となる本
5 実践的な衝突判定技術を広範囲にカバー
5 衝突最高!



ゲームプログラマになる前に覚えておきたい技術
平山 尚(株式会社セガ)
秀和システム
売り上げランキング: 2709
おすすめ度の平均: 5.0
5 良書です。
5 プログラミングはできるがゲームは作れないあなた向け
5 ゲームを作りたい方へ
5 基礎を習得して凝り固まった頭が少しほぐれました
5 初級プログラマが一人でゲームをつくれるようになるための本。



3D‐CGプログラマーのためのクォータニオン入門―「ベクトル」「行列」「テンソル」「スピノール」との関係が分かる! (I・O BOOKS)
金谷 一朗
工学社
売り上げランキング: 151249
おすすめ度の平均: 3.0
2 クォータニオンの本?
4 7章だけ別次元
2 非常に難解だと思います。
3 本書だけでクォータニオンを理解するのは難しいと思う
4 クォータニオンを用いた3次元回転入門の適書



ハミルトンと四元数―人・数の体系・応用
堀 源一郎
海鳴社
売り上げランキング: 382190
おすすめ度の平均: 4.0
4 実務に役立てる!! 強引に...



微分幾何学と接続

楽天で買う

価格:3,900円(税込、送料別)




Game Programming Gems
Game Programming Gems
posted with amazlet at 09.12.23
Mark DeLoura 川西 裕幸 狩野 智英
ボーンデジタル
売り上げランキング: 56751
おすすめ度の平均: 4.5
5 様々な技法が載ってます
4 Graphics Gemsの後継書
5 やや敷居は高いかも
4 日本のゲームプログラマーを目指す人に一冊


Game Programming Gems 2 日本語版
Mark DeLoura 川西 裕幸 狩野 智英 鳥海 有紀
ボーンデジタル
売り上げランキング: 147427
おすすめ度の平均: 5.0
5 Game開発の辞書的な存在です


Game Programming Gems 3 日本語版
Dante Treglia 中本 浩 川西 裕幸
ボーンデジタル
売り上げランキング: 148533


Game Programming Gems 4 日本語版
Andrew Kirmse 中本 浩 川西 裕幸
ボーンデジタル
売り上げランキング: 157007


Game Programming Gems 5 日本語版
Kim Pallister
ボーンデジタル
売り上げランキング: 218804


Game Programming Gems 6 日本語版
Michael Dickheiser
ボーンデジタル
売り上げランキング: 190711


Game Programming Gems 7 日本語版
Scott Jacobs
ボーンデジタル
売り上げランキング: 188270



GPU Gems 日本語版―リアルタイムグラフィックスプログラミングのテクニック、ヒント、トリック
中本 浩
ボーンデジタル
売り上げランキング: 70836
おすすめ度の平均: 5.0
5 実用的な手法を、演算レベルから解説した良書


GPU Gems 2 日本語版 ‐ハイパフォーマンス グラフィックスとGPGPUのためのプログラミング テクニック‐
中本 浩
ボーンデジタル
売り上げランキング: 123436


GPU Gems 3 日本語版
GPU Gems 3 日本語版
posted with amazlet at 09.12.23
Hubert Nguyen
ボーンデジタル
売り上げランキング: 29136



GLUTによるOpenGL入門―「OpenGL Utility Toolkit」で簡単3Dプログラミング! (I・O BOOKS)
床井 浩平
工学社
売り上げランキング: 53313
おすすめ度の平均: 4.0
4 いまどき
3 今から勉強するなら…買いである
4 WEB版とほぼ同じ
5 入門書としてオススメ♪


OpenGLによる3次元CGプログラミング
林 武文 加藤 清敬
コロナ社
売り上げランキング: 79965
おすすめ度の平均: 4.0
4 最初の1冊に最適
5 数値シミュレーション入門に。
5 3次元CGの教科書向け
3 あくまで入門書
4 入門用に


OpenGLプログラミングガイド 原著第5版
OpenGL策定委員会
ピアソンエデュケーション
売り上げランキング: 55645
おすすめ度の平均: 5.0
5 待望のバイブルついに OpenGL 2.0対応で帰ってきました
5 お勧めです!


OpenGL Programming Guide: The Official Guide to Learning OpenGL, Versions 3.0 and 3.1 (7th Edition)
Dave Shreiner The Khronos OpenGL ARB Working Group
Addison-Wesley Professional
売り上げランキング: 6786


OpenGLで作るiPhone SDKゲームプログラミング
横江 宗太(株式会社パンカク)
インプレスジャパン
売り上げランキング: 1635
おすすめ度の平均: 5.0
5 OpenGL ES に一歩近づけてくれる一冊です
5 iPhoneのOpen GLの最初の足がかりに
5 ヒントが沢山の良書です


OpenGL ES 2.0 プログラミングガイド
Aaftab Munshi Dan Ginsburg Dave Shreiner アフタブ・ムンシ ダン・ギンズバーグ デーブ・シュライナー
ピアソンエデュケーション
売り上げランキング: 5269
おすすめ度の平均: 5.0
5 お勧めです



DirectX ゲームグラフィックス プログラミング Ver. 2.1 Vista [NextCreator] (NEXT CREATOR)
N2Factory
ソフトバンククリエイティブ
売り上げランキング: 193706
おすすめ度の平均: 4.5
4 わかりやすいです
3 初心者には良い内容です
5 分かりやすい
5 とても良い入門書
5 非常にわかりやすい


DirectX9 DirectX Graphics (I・O BOOKS)

工学社
売り上げランキング: 203036
おすすめ度の平均: 4.0
4 DirectX9 December 2004版
4 初心者向け


DirectX9必携
DirectX9必携
posted with amazlet at 10.06.12
鎌田 茂雄
Northbrain
売り上げランキング: 9949
おすすめ度の平均: 4.0
3 わかっている人向けのリファレンス本
5 新500の極意



【送料無料】いかにして問題をとくか第11版

楽天で買う
価格:1,575円(税込、送料別)

いかにして問題をとくか
G. ポリア
丸善
売り上げランキング: 41

10.サイト内関連ページ


11.外部へのリンク


12.更新履歴

このページの主な更新は Blog でお知らせします.

  1. 2006/10/11(水) OKWave に寄せられた質問に回答したことをまとめ, 「2次元幾何学・CG のアルゴリズム集」のページで公開.
  2. 2006/10/12(木) 解説を少し修正.
  3. 2006/10/27(金) 解説を少し修正,リンクを追加.
  4. 2006/10/28(土) 「2次元幾何学・CG のアルゴリズム集」のページから分離独立.
  5. 2006/11/05(日) 右回り、左回り?のリンクを追加.
  6. 2006/12/13(水) 時々,「なす角」や「C言語」等で検索して来る人がいるので, 下記を追加.
  7. 2006/12/14(木) サイト内関連ページを追加.
  8. 2006/12/24(日) 解説を少し修正・追記.
  9. 2007/04/15(日) 外積の独立成分の意味を (1行だけ) 追記,記号を変更.
  10. 2007/10/07(日) 相変わらず「なす角」や「3次元 回転」などで検索して来る人が多いので, 2次元ベクトルの回転角 (なす角+回転方向) の求め方を更新,3次元,N次元 (なす角回転方向) の場合を追加.
  11. 2007/10/08(月) タイトルを「3点の座標から簡単に角度と回転方向を求める. (2・3・N次元,外積を用いる方法)」に変更.
  12. 2008/08/17(日) 関数名変更 (Vector2{Inner,Outer}Product() → Vector2{Dot,Cross}Product()).
  13. 2009/02/12(木) 「外積 C言語」とか「外積 アルゴリズム」とか, あまりにも自分の頭で考えずに検索して来る人が多いので, サンプルプログラムを穴埋めクイズ化.(笑)
  14. 2009/03/13(金) 外積を計算する関数・マクロを追加.
  15. 2010/06/12(土) 参考・関連図書を追加.
  16. 2010/09/13(月) 3点の座標から角度・距離・内積・外積などを計算する Excel ファイルを委託販売開始.
  17. 2011/01/22(土) 図 (sin cos tan) を追加.
  18. 2011/11/03(木) 参考・関連図書を追加.
  19. 2012/08/25(土) サンプルプログラムを改定.
  20. 2012/12/29(土) 内積と外積に関するリンクと用語を少し整理.
  21. 2013/01/14(月) 穴埋めクイズ化解除.
  22. 2014/01/11(土) 図 (atan2(A×B, A・B)) を追加.
  23. 2016/04/03(日)
    • DLmarket の販売手数料率変更による価格変更.
    • 角度の記号をθに統一.(φはフォントによって字形が変わるので廃止.)


Copyright © 2006-2016 noocyte
E-mail: relipmoced (a) yahoo.co.jp
  (" (a) " を半角のアットマークに書き替えてください.)
リンクはご自由に.
「幾何学・CG のアルゴリズム集」に戻る.
「noocyte のプログラミング研究室」トップページに戻る.