ホーム » 2011 » 1月 » 20

日別アーカイブ: 2011年1月20日

2011年1月
« 12月   2月 »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

最近の投稿(電子情報)

アーカイブ

カテゴリー

C++にてboost体験

C++の再学習にて、「C++クックブック」を見ているんだが、ライブラリにてboostの事例も多い。 んで、調べていると、昨日書いていたc++0xを使ったvectorの初期化だけど、 boost だと、boost::assign::list_of なんてぇ~のを使うと、c++0xを使わなくても書けちゃう。

#include <iostream>
#include <vector>
#include <boost/assign/list_of.hpp>
using namespace std ;
int main() {
// 初期化リストの要素が() で囲まれているのがポイント、
// operator()() の演算子オーバーライドで実装しているみたい。
vector<int> v = boost::assign::list_of (1) (2) (3) ;
for( vector<int>::iterator it = v.begin() ;
it != v.end() ;
it++ ) {
cout << *it << endl ;
}
}

変態チックだな…当然、bitset<8>でも動くぜ…変態…

昨日は、c++0xのラムダ計算を試した(gcc4.5入れてなくって、コンパイルでけんかったけど) けど、boost にもラムダ計算がある…。 g++側に依存しないという意味では、boost の方が便利だけど、ここまでいくとなぁ… 参考サイト見つけたけど、さらに変態度が増している。

#include <iostream>
#include <vector>
#include <boost/assign/list_of.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
int sum = 0 ;
int main() {
using namespace std ;
using namespace boost::lambda ;
vector< int > v = boost::assign::list_of ( 1 ) ( 2 ) ( 3 ) ;
for_each( v.begin() , v.end() , sum += _1 ) ;
cout << sum << endl ;
}

追記:んでも、使う前にBoostのインストール。Mac と Debian にもいれてみた。

(( Mac OS X ))
# fink list | grep boost
# fink install boost1.35.systempython
## boost-jam,boost1.35.systempython,
## boost1.35.systempython-shlibs がインストールされる。
(( Debian GNU/Linux ))
# aptitude search boost
# aptitude install boost-all-dev
## debianでは様々なライブラリが細かくパッケージ化されている。
## 何を使うか解らないので、ともかく全部いれてみた。
## 変態な、boost/lambda も入っちゃう。

2次元座標の拡大縮小回転移動

グラフィックスの基本ということで、 座標の拡大縮小・回転・移動などの説明を行い、 説明プリントを見ながら、値渡し・ポインタ渡し・配列渡しの再確認。

配布資料を見ながら、座標の拡大縮小・回転・移動などの概念を説明し、 行列表記に慣れてもらう。線対称・点対称・拡大・移動・回転は、資料参照。 最終的に、すべての2次元の座標変換は、以下のような行列積と和で表せる。

特に、その結果を、以下のように扱うものはアフィン変換と呼ばれる。

この他に、グラフィックス処理では、大量の計算を伴い、計算速度の高速化への理解も 重要なので、最適化について紹介する。 基本的な、不変値計算のループ前移動や、整数演算化による高速化、最近CPUでの積和演算命令といったものをいくつか紹介する。