同次座標 ( 斉次座標 ) とは

同次座標導入するのは、
平行移動・回転移動・投影変換などが行列表現できるため。

 

同次座標系 ( homogeneous coordinates ) 。 同時座標で表すこと。同時座標表示。
homogeneous:均質な均等な
homogeneous を「同次」と訳したのは
" 次元 " を増やして線形変換と " 同じ " ものとして扱えるようにする、
という意図があるもよう。

2 次元ならば 3 次元に、3 次元ならば 4 次元に、
次元増やして線形変換表現にすること

一般に、
2 次元の座標を 3 次元の座標で表現すること。
( n 次元のベクトルを n + 1 次元のベクトルで表現すること )

射影幾何学において、無限遠も考えなくてはならないが、
無限遠点を特別扱いにすると形式上いろいろな不便が生じるので、
これを通常の点同様に扱えるよう導入された座標。

 

通常 ( x, y ) で表わせるが ( 通常座標表示と呼ぶ )
x = x0 / x2
y = x1 / x2 ※ ( x2 ≠ 0 )
という 3 つの組 (x0, x1, x2 ) を考えると連比によって点 ( x, y ) を
表わすことができる。( 基準を x2 とし x0,  x1 は x2 の何倍か、的な ?  )
x2 重みと呼び、同時座標では [ x0 x1 x2 ] と表わす。

x0 = x1 = 0 の時は原点 ( 0, 0 )、
x0 = 0 、x1 ≠ 0 の時は y 軸上の点、
x0 ≠ 0 、x1 = 0 の時は x 軸上の点を表わす。
( 無限遠点の表わし方も書いてあったがよく分からないので略 )

つまり、
[ X Y Z W ] は通常座標では ( X / W , Y / W , Z / W ) と表現し、
( x, y, z ) は同次座標では [ x y z 1 ] と表現する。
W倍率 ( 重み ) の役割をしている。W = 0 なら無限遠を表現することになる。

イメージとしては、
y = ax + b は
y 軸に平行な直線 ( x = n ) を表わせないのに対して、

ax + by + c = 0 は
例外なく表わせる。

 

 

1 の理由
ワールド空間で平行移動をしたいがために設定されている。
( n + 1 ) 次元空間の中に図形を拡張するが、その図形は元々 n 次元内の
図形なので図形が持っている次元が増えることはなく、
増やした次元に対応する変数は固定した定数、つまりは 1 で表される。
1 以外の定数 k でも問題ないが、k は変換の表現行列に吸収することができるので、
普通は 1 で表す。 ?

 

連比
3 つ以上の比を a : b : c と一つにまとめたもの。

ex )
「 a : b 」= 3 : 2 、「 b : c 」= 5 : 4 の時、
b の値を「 a : b 」「 b : c 」で同じにすると、
「 a : b 」* 5
「 b : c 」* 2 により、
「 a : b 」= 15 : 10 、「 b : c 」= 10 : 8
a : b : c = 15 : 10 : 8 となる。

 

 

 

こちらから。
http://www.fmaj7b5.info/wiki/index.php?title=%E5%90%8C%E6%AC%A1%E5%BA%A7%E6%A8%99
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1270910567
https://kotobank.jp/word/%E6%96%89%E6%AC%A1%E5%BA%A7%E6%A8%99-85874 http://nishitalab.org/user/nis/CG/cgtxt/cg2/cg024.htm http://marupeke296.com/DXG_No55_WhatIsW.html
https://mathwords.net/renpinokeisan
http://wwwb.pikara.ne.jp/ogawa-giken/image_process/image_062.html http://www.osakac.ac.jp/labs/niizeki/monkey/section-3.html

以上。

投影変換 - a02

2D 面に 3D を描きたい の軌跡メモ 02。

以下の順序で変換していくもよう。
1 ) ワールド座標 ( 3D ) から視点座標系へ変換。
2 ) 3 次元空間での視点座標系から スクリーン座標系 ( 2D ) へ変換。

 

全体座標系 ( ワールド座標系 ) X, Y, Z
視座標系 ( カメラ座標系 ) x, y, z
正規化視座標系 xn, yn, zn

http://ocw.nagoya-u.jp/files/34/CS7.pdf より拝借。

投影変換:
3 次元空間内に定義した形状を 2 次元面上に投影する変換のこと。

 

透視投影変換:
視線を z 軸上において、z 軸に垂直な面に投影する変換

f:id:koshinRan:20190312185941p:plain

 

平行投影変換:
カメラ座標系の原点を、ワールド座標系の原点から無限遠において
z 軸に垂直な面に投影する変換。

f:id:koshinRan:20190312185806p:plain

 

無限遠
・ピント調節が不要となる距離。
・被写体が非常に遠方にあること。

無限遠点:
・限りなく遠いところにある点。
・平行な 2 直線は交点がないので、無限遠点という仮想の点で交わると考える。
無限遠点の全ては仮想的な無限遠直線を描く。( と考えると都合がよい。 )

無限遠点・無限遠直線により、
「異なる 2 点を通る直線はただ 1 つ」「異なる 2 直線は常に 1 点で交わる」
が成り立つ。(よく分からん。特に無限遠直線)

 

 

透視投影変換

透視投影変換では、視点と投影面の位置を違えた 2 つの変換が使われる。
( 図では v があるが、書くのめんどいので x, y, z で )

視点: z軸の値 0投影面: z軸の値d ( 通常こちら使用 )
f:id:koshinRan:20190312190118p:plain

 

視点: z軸の値 = -d投影面: z軸の値 = 0 ( d が ∞ の時平行透視変換となる )
f:id:koshinRan:20190312190218p:plain

 

 

 

こちらから。
http://ocw.nagoya-u.jp/files/34/CS7.pdf
https://ja.wikipedia.org/wiki/%E7%84%A1%E9%99%90%E9%81%A0
https://kotobank.jp/word/%E7%84%A1%E9%99%90%E9%81%A0-641226
https://ja.wikipedia.org/wiki/%E7%84%A1%E9%99%90%E9%81%A0%E7%82%B9
無限遠直線(むげんえんちょくせん)とは - コトバンク
http://www.osakac.ac.jp/labs/niizeki/monkey/section-3.html

以上。

座標系 - a01

 2D 面に 3D を描きたい の軌跡メモ 01。
大きさ 100 ( 縦 ) * 200 ( 横 ) * 50 ( 高さ ) の直方体を
とりあえず正面から見た時のように描画したいが…。何から始めればいいのやら。

 

右手系左手系

右手系ワールド座標系
左手系視点座標系 ( 座標原点に視点を置いた座標系 ) 。
左手系で考えるもよう。右手系か左手系かで座標変換の公式も変わるので注意。

親指         :x 軸
人差し指:y 軸
中指指    :z 軸

http://www.f.waseda.jp/moriya/PUBLIC_HTML/education/classes/infomath6/applet/fractal/coord/
http://www.wakayama-u.ac.jp/~tokoi/lecture/gg/ggbook03.pdf (22p) より。f:id:koshinRan:20190222201647p:plain

 

 

3 つの座標系

3D から 2D に変換するのに 3 つの座標系を理解する必要がある。らしい。
http://ocw.nagoya-u.jp/files/34/CS7.pdf より拝借。

 

全体座標系 ( ワールド座標系 )

3 次元モデルが定義されている座標系 ( 右手系 ) 。
X, Y, Z

f:id:koshinRan:20190312183350p:plain

 

視座標系 ( カメラ座標系 )

視線を z 軸とした座標系 ( 左手系 ) 。
x, y, z

f:id:koshinRan:20190312183446p:plain

 

正規化視座標系

カメラ座標系の可視領域を正規化した座標系 (左手系) 。
隠面・隠線処理で必要となる。
xn, yn, zn

f:id:koshinRan:20190312183524p:plain

 

正規化
データなどを一定のルールに基づいて変形し、利用しやすくすること。

隠面処理
視点からは影になって見えない部分の面を消去する処理のこと。
隠線は見えない線を消すこと。

 

 

 

こちらから。
http://ocw.nagoya-u.jp/files/34/CS7.pdf
https://kotobank.jp/word/%E9%9A%A0%E9%9D%A2%E5%87%A6%E7%90%86-438076

以上。

サクラエディタ_補完機能

単語ファイルの設定と、編集中のファイルから候補を探すの 2 通りある。
後者のメモ。

 

  1. 設定 > タイプ別設定 > 支援
  2. 編集中のファイル(F) にチェックを入れる。( 既に入っていた )
  3. 入力文字を確定し、[ Ctrl ] + [ Space ] または [ Ctrl ] + [ / ]

補完候補が一つの場合は補完され、補完候補がない時は何も起こらない。
[ Esc ] で補完を完了せずに終了。

 

IME の「単語の登録」で登録した方が早い。

 

こちらから。
http://sakura-editor.sourceforge.net/htmlhelp/HLP000104.html

以上。

C++_メソッドの呼び出し方メモ

C++_コンストラクタに引数を渡して初期化」内の「===Memo===」へ追記的な立ち位置。

 

    // A
    auto ch = new CHoge();
    ch->xxx();
    delete ch;

    // B
    CHoge ch;
    ch.xxx();

クラスは「 . 」でそのクラスのメソッドを呼び出せる。( B )
A の auto 、この型はポインタ ( CHoge * ) 。
ポインタなら、メンバにアクセするには「 -> 」を使用する。

 

C 言語では、ヒープ上のメモリを管理するために malloc() / free() 関数を使用。
C++ は、 malloc() の代わりに new 演算子を、free() の代わりに delete 演算子を使う。
スタック:スコープが明確に分かっているデータに対してしか利用できない。
ヒープスコープが不明、実行時にしかサイズ確定しない、大きなデータ領域を確保したい場合つかう。

 

ギモン & memo

. 」 値型、「 -> 」がC# の参照型に該当するイメージでいいのか。

インスタンス値型の場合と、参照型 ( & ) の場合において、
メソッドを呼ぶ時は両方とも「 . 」。

    //xxx は受け取った値を表示
   
    Choge c1;
    c1.xxx(str1); // str1 の値が出力
   
    Choge & c2 = c1;
    c2.xxx(str2); // str2 の値が出力

※ Choge c1(); と、() いらない。() までが変数名になってしまう。ビルドエラーになる。 

 

---Memo---
static メンバは、クラスのオブジェクトに属するのではなく、
クラスそのものに属する 。クラス名:: 静的メンバ変数名 で参照。
static クラスはインスタンス化できない。
C++ での static クラスと普通のクラスとの区別つかなくなってきた…。

こちらから。https://www.s-cradle.com/developer/sophiaframework/tutorial/Cpp/class.html
https://www.s-cradle.com/developer/sophiaframework/tutorial/Cpp/newdelete.html
https://www.s-cradle.com/developer/sophiaframework/tutorial/Cpp/static.html
http://www7b.biglobe.ne.jp/~robe/cpphtml/index.html
http://www7b.biglobe.ne.jp/~robe/cpphtml/html02/cpp02028.html
静的クラスと静的クラス メンバー - C# プログラミング ガイド | Microsoft Docs

以上。

C++_配列を std::vector に変換

値を std::vectorコピーする

 

    int intAry[5] = { 1, 2, 3, 4, 5 };
    std::vector<int> intVec(std::begin(intAry), std::end(intAry)); 

std::vector<型> 変数名 ( * first, * last); と記述すると、
first から last が指す先までのデータ初期化できる。 

 

 

こちらから。
https://riptutorial.com/ja/cplusplus/example/2327/converting-an-array-to-std--vector
http://vivi.dyndns.org/tech/cpp/vector.html

以上。