C/C++先日X11/Xlib.h、X11/Xutil.hを用いてフラクタルを描画するプログラムを作成していた折、描画する図形を構成する線分の色を変えようと試みた。Systemではあらかじめ定義されている色名があるが、今回は多くの色を扱うためRGB指定での描画色の変更を行う。以下のような整数型のピクセル値を返す関数MyColorを作成する。(c1.pixel);}引数colorに以下に示す書式に則ったRGB色を表す文字列を代入しピクセル値を得る。(指定した色が青の場合)ここで得られるピクセル値をXSetForeground関数に代入することでRGB値の指定による描画色の変更を行うことができる。RGB値指定が可能になることで表現できる色は飛躍的に増えるが、ソースプログラム中にいちいち値を指定した文字列を予め作成しておくのでは、少々非効率である。フラクタルのような再起関数を用いる場合、繰り返し回数は等比級数的に増す場合もあり、カラフルな図形の表現を行うには別の手法を試みる必要がある。そこで、上記のRGB値を指定する書式を自動生成する関数のプログラムを以下に示す。生成した色の数//exit(0);}sprintf関数を用いて書式を指定した文字列を生成することが出来る。ループのiの増分をi++に変更すれば0xFFFFFF色分のカラーマップを生成できる。このカラーマップの順序は少々とっぴで、パラメータj順に色を表示すると所所でカラージャンプがあるため、滑らかなグラデーションを生成したい場合はsprintfの引数の指定方法を変える必要がある。最終的にはソースコード中で以下のように色を変更する一文を加える。comap[lim(++coindex)]));これによって生成されたフラクタル画像を下図に示す。左がイニシエータ、右がジェネレータ、中央が生成したフラクタル図形。Variable以前、Boostライブラリを用いたスレッドの同期と排他制御を取り上げましたが、今記事はそれのpthreadバージョンです(似せただけです)。mutex、conditionクラス複数のスレッドから1つの変数にアクセスする際、システム側のスレッドスケジューリング次第で、予期せぬ書き換えが起こってしまう場合があります。Homeのページを参考にWindowsでEclipse3.3とCDTをインストールしました。スレッドの生成と実行C/C++でスレッドを扱う場合は、プラットフォームによって使用するライブラリが違います。y)×n個を計算しその点を結ぶことによって描画します。nを分割数とすると、nに比例して円は滑らかになります。同じような処理を行うスレッドが複数ある場合は、それらをスレッドグループでまとめると、スレッドへの操作がやり易くなります。コメントをキャンセルメールアドレスが公開されることはありません。