c/c++

C言語でプライオリティーキュー構造体

C言語で関数ポインタを使ってカプセル化に挑戦してみた でやってみたカプセル化にならって、優先順位付きキューを実装してみました。int型を扱うシンプルな作りをしていて、構造体を作るときに渡す列挙体の値で優先順位を昇順か降順か選択できます。また、ヒ…

C言語で関数ポインタを使ってカプセル化に挑戦してみた

要はデータと手続きを一緒にすりゃいいんでしょ簡単簡単みたいなテキトーな考えに基づいて、構造体のメンバに関数ポインタを代入するだけのカプセル化(笑)に挑戦してみました。 さて、どんな題材にしようか迷ったあげく、C言語でもっとも面倒な処理の一つ…

libpngを使ってGLUTで表示中の画面をpng画像として保存する

[,h250,left]OpenGLのglReadPixels関数を使うとフレームバッファのピクセルデータを取得できます。もちろんそれを画像として保存できますが、取得できるのはピクセルデータだけなのでそれを何らかのフォーマットで保存する事になります。今回はlibpngを使っ…

リニアPCMのWAVファイルを読み込む

wavファイルを読み込む簡単なC++のクラスを書いた。バイナリファイルを構造体定義とfreadで一気に読み込む方法は始めて知った。なんて楽なんだ。参考urlのデータ読み出し手順の例を読んでいる限り、タグの現れる順番は予め決まっているわけではないようだ。f…

libpngでpng画像ファイルからOpenGLテクスチャを作成

OpenGLでlibpngを利用してテクスチャを貼り付ける手順を調べたのでメモ。OpenGLでテクスチャを利用する際、画像ファイルフォーマットのパースはOpenGLでサポートされないので自前でパースするか、あるいは既存のライブラリを利用するなどして読み込む必要が…

boost::threadでマルチスレッド処理

boostにポータブルなマルチスレッドライブラリがあるのを知ったので使ってみた。セマフォ、条件変数なんかも用意されているっぽいので機会があったら使ってみようと思う。 /* * 参考 * http://www.boost.org/doc/libs/1_31_0/libs/thread/doc/thread.html#cl…

OpenGLを使ったプログラムのエラー

select_region.c:10: error: ‘y1’ redeclared as different kind of symbol手元のOpenGLプログラムがコンパイルエラーになるので調べると・・・ http://www.hinet.mydns.jp/tdiary/?date=20090608#p01へー。っていうか、え〜〜〜

c++で行列をバイト列で保存&復帰

巨大な行列を沢山のファイルに保存するととんでもないサイズになるのでどうにかしてディスク容量を節約できないかと考えた結果、行列をバイナリで保存と読み込みをするテンプレートクラスを書けばいいやと考えた。どの程度ポータブルなのかちょっとわからな…

float,double,long doubleで数学関数の実行速度の比を出してみる

C言語の数学関数のうちpow, sin, asin, abs, sqrt, exp, logについてfloat,double,long doubleの実行速度を比べてみた。出したのはdouble, long doubleの計算時間とfloatの計算時間の比。生成する乱数の範囲が適当かどうかわからない。ご指摘大歓迎です。 /*…

使えない

C++で3次元ベクトルの距離を計算するdistanceという関数を定義しようとしたらSTL algorithmのstd::distance関数と衝突し、それと気がつかず意味不明なエラーに悩まされた。またかよ。よく使いそうな名前はとっておいてほしかった。

opengl学習 -三次元空間上で最小全域木を構築する-

前のエントリで使ったプログラムでさらに遊んでみた。というか本当はこれがやりたかった。ランダムに生成した三次元座標の集合から最小全域木を構築して表示させる。ちなみにこれが前回やった二次元版。 そしてこれが今回作った三次元版。 実行は以下のよう…

opengl学習 -遊ぶ-

前のエントリで描いたプログラムで遊んでみる。立方体 ハイパーキューブ さらにランダムに描画させてみる。実行は $ python mkdsldat.py 10 10 20 | ./a.out /dev/stdinとか。[,left] # mkdsldat.py # coding: utf-8 # ランダムなデータの生成 import random…

opengl学習 -どの球同士を接続するか指定する-

[,left] 前のエントリのプログラムをさらに改良して点のリストと、それらの点を結ぶ2つのインデクスをうけとり描画するようにした。

opengl学習 -円柱で2点を結ぶ-

[,left] 前のエントリのプログラムを改良して、球を円柱で結ぶようにした。円柱を描く関数はhttp://www.wakayama-u.ac.jp/~tokoi/opengl/faq.html#Q6から引用させていただいた。 2点を結ぶ方法はhttp://groups.yahoo.co.jp/group/opengl-jp/message/2397とht…

opengl学習

[,left] 改行で区切られた3次元座標のテキストファイルを受け取り、それぞれの点に球を描いて、さらにそれぞれを線で繋ぐプログラム。カメラの位置と視点はキーボードからの入力で移動させられる。いずれは球同士を円柱で繋ぎたい。

opengl学習

structure synthみたい。パーサとか作ってwxWidgetsと組み合わせれば似たようなものが作れそうだ。そうでもないか。

wxGladeでGUIアプリを構築してみた

[,left,w350] クロスプラットフォームなGUIライブラリwxWidgetsの使い方を学習中。さらにこのライブラリに関係してwxGladeというGUI開発ツールもあり、それを使うとC++だけでなく、Perl,Pythonなど複数の言語のGUI構築のスケルトンコードを生成できるような…

STL vectorに大小関係が3すくみの型を入れたらどうなるか

大学の先輩に、STL vectorコンテナにじゃんけんみたいな3すくみの大小関係を持つ型を指定してソートさせるとどうなるのかという話をしたら2人とも気になって一緒に書いた。 #include<iostream> #include<vector> #include<cstdlib> using namespace std; struct janken { enum {Gu,Chok</cstdlib></vector></iostream>…

使えない変数名

プログラムに使う変数や関数にはわかりやすい名前をつけるべき、という理由からC++でcountという名前の変数をグローバルで宣言してコンパイルした。コンパイルエラー。STLアルゴリズムにある関数と名前がかぶった。コンパイルエラー: #include<iostream> using namesp</iostream>…

プリム法で求めた全域木をOpenGLで表示してみる

前のエントリで最小全域木問題をプリム法で解いてみたものの、出力が数字の羅列だと達成感が薄いのでOpenGLで表示させる。さっきPythonで解いた全域木 頂点数を増やしてみた 頂点をランダムに打つようにして沢山打ってみた おおお。 // 無向な完全グラフの最…

マンデルブロ集合の描画結果をもっと早く綺麗にみるために

前のエントリで、マンデルブロ集合の計算量の多さを隠蔽するために画像を縦に分割して描画して早く計算結果を見られるようにした。このやりかたはわかりやすいものの、もっといい方法が無いか考えた。3x3のマスを考える。左上から右下に描画していく初めのや…

cudaプログラムをvimで書くときの簡単な設定

fedora9でcudaプログラムを書く度にset ft=cppとタイプしていたがいい加減面倒になってきたので。 mkdir -p $HOME/.vim/ftdetect cat > $HOME/.vim/ftdetect/ft.vim au BufNewFile,BufRead *.cu set ft=cpp http://forums.nvidia.com/index.php?showtopic=43…

台形則による数値積分とOpenGLとアフィン変換

OpenGLで台形則を使った積分を描いてみた。ところでOpenGLの視点設定が覚えられない。難しすぎる。いつも視点移動させずに、座標を移動させたり縮小させたりしてデフォルトの範囲内におさまるようにしている。 #include<stdio.h> #include<GL/glut.h> // 自前のアフィン変換に使</gl/glut.h></stdio.h>…

OpenMPによる並列マンデルブロ集合が正しく動いた

前回のエントリを書いた後、id:succeedさんの指摘でスレッド間で共有されるべきでない変数が共有されていることに気がついた。あ。さっそく変数の宣言場所を変えてみるものの、やはり画像が乱れる。駄目かーと思い諦めようとしたその時、OpenMPの動作はpriva…

OpenMPでOpenGLを使ったマンデルブロ集合のプログラムを高速化しようとしてこけた

マンデルブロ集合を描画するプログラムをOpenMPで高速化しようとして驚いた。gccでOpenMPを有効にしてコンパイルして実行するとノイズだらけの乱れた画像が生成された。 ネット上を調べてみるとOpenGLはマルチスレッドを考慮した作りになっていないので、マ…

ビット配列による素数表の改良の改良

ビット配列を使ったエラトステネスの篩を改良で書いた内容をさらに発展させて偶数だけを素数表に持たないだけでなく3の倍数、5の倍数も持たないようにすればメモリ使用量をさらに減らせるじゃんと気づいた。2の倍数と3の倍数を素数表に持たない場合、必要…

ビット配列を使ったエラトステネスの篩を改良

ビット配列による素数表よりさらにメモリを節約できるエラトステネスの篩の改良を思いついた。偶数の場合は2以外は素数でないので、素数表にその真偽を保持する必要は無い。なのでインタフェース関数を使うことでメモリ使用量をさらに半分にできる。32bitの…

float型変数をバイナリダンプ&プリティープリント

IEEE754単精度浮動小数点数をバイナリダンプするプログラム。リトルエンディアンのみで使えます。 /* * 単浮動小数点数をバイナリダンプするプログラム。 * リトルエンディアン専用。 */ #include<stdio.h> void sedump(int s, int e, float x) { // float型変数x左か</stdio.h>…

俺バーチャルマシン

バーチャルマシンってどんな感じだろーと思ってプログラミングした。多分こんな感じ。 // vm.cpp #include<iostream> using namespace std; typedef unsigned int uint; typedef unsigned char uchar; typedef uchar rgst_t; // レジスタ型 #define MEM_SIZE (0xffff) </iostream>…

順列を出力

a,b,c,dの4文字でできる文字列すべての順列を列挙するプログラムをかいてみました // a,b,c,dからできる文字列の組み合わせを列挙する #include <stdio.h> #define N (4) const char chars[N] = {'a', 'b', 'c', 'd'}; int visit[N]; char out[N+1]; void search(int </stdio.h>…