ソースプログラムを覗いてみよう!! |
【C言語によるコンソール画面制御】 | http://www.souzousha.iinaa.net/IntroductionToC/index.htm#console |
【C言語によるマルチスレッド】 | http://www.souzousha.iinaa.net/IntroductionToC/index.htm#multiTh |
なお,VS2019以降は,最初の新規プロジェクト作成の
「空白」プロジェクトの指定が複雑になりました。
【注意】
以下,Microsoft Visual C++2017,2019では
myWin.hなどインクルードファイル の先頭に
#pragma once
の1行を挿入してください。
さらに,「プロジェクト」「***のプロパティ」を選択し
プロパティページで「リンカー」「システム」を選択して
「サブシステム」で「Windows」を選択しましょう。
警告を無視するよう指定する必要もあります。
プロパティページで「C/C++」「詳細設定」を選択して
「指定の警告を無効にする」欄で「4996」等を指定して下さい。
関数関係のチェックが厳しくなっています。
例えば, doubleの絶対値はabsではなくfabsを使うことになっていたり
文字列定数を実引数に指定するとき,
「TCHAR * str」を「const wchar_t * str」と
書き直したりする必要があります
また,プログラムを完全に終了させるためには
exit(0)関数を最後に呼び出してください。
LRESULT CALLBACK WndProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp) {
switch (msg) {
case WM_DESTROY: PostQuitMessage(0); exit(0);
・
・
・
}
以下のインクルードファイル(.h)を使うと、
四元数を演算子の対象にすることができます。
quater.h
以下に、このインクルードファイルを使ったソースプログラム例を示します。
ただし、演算子のオーバロードは裸のC言語の機能ではなく、
C++の機能ですので、ソースプログラムの拡張子は".cpp"、
ボーランドC の人は、C++としてコンパイルして下さい。
演算子のオーバロードを用いた例
(2015/12/13 無駄な処理の削除、μ>1のときμ=-1に戻すようにしました)
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
Win32プロジェクトを選んで、
追加オプションで空のプロジェクトを選択してください。
新しい項目の追加を選んでインクルードファイルとソースプログラムを、
コピー&ペーストして下さい。
タイマーイベントを使っていますので、初心者のために
超簡単なターマーイベントのプログラム例を示します。
タイマーイベントの簡単な例
以下は、パラメータを入力できるように改良したバージョンです。
【改良版】グモウスキーとミラの写像
(2015/12/13 μ>1のときμ=-1に戻すようにしました)
以下は、グモウスキーとミラが提唱した別の写像です。(2017/02/02追加)
他のグモウスキーとミラの写像【その1】
他のグモウスキーとミラの写像【その2】
上記5のmyWin.hを使っていますので、
同様にインクルードファイルとしてコピー&ペーストしてください。
なお、ビットマップに描画し、それを画面に表示する簡単な例題にもなっています。
2015/12/31収斂回数も色表示できるよう改良しました。
なお収斂も発散も検出できなかった場所は黒色で表示しています。
【配色を変更した版】
配色の方法を変えてみました。 (2016/01/02 画面を拡大・移動できるように大幅改造しました)
全体 表示方法を変えた例
上記5のmyWin.hを使っていますので、
同様にインクルードファイルとしてコピー&ペーストしてください。
myWin.h
2017/01/11 シダの葉の反復関数系を改良しました。
上記5のmyWin.hを使っていますので、
同様にインクルードファイルとしてコピー&ペーストしてください。
myWin.h
なお、マウスイベントを使っていますので、初心者のためにマウスイベントの
超簡単なマウスイベントプログラム例が以下です。
マウスイベントの簡単な例
マウスイベントを確認する
以下は、右クリックで旗の表示ができるように改良したバージョンです。
【改良版】C言語によるマインスウィーパ
実行では、四則演算と若干の関数だけを用意していますので、
トレーニング用として、他の演算子や関数を増やしてみましょう。
以下は、標準入力から文を入力するバージョンです。
【標準入力版】逆ポーランド記法への変換と実行
C言語の unsigned long の範囲内(0 〜 4,294,967,295)で
英語の読みを表示するプログラムです。
コンソールアプリケーションとして作成しています。
言語処理を学ぶ学生さん用に語彙解析(Lexcal Analysis)から
呼び出せる形の関数として記述してあります。
関数ポインタのよい使用例となっています。
C言語のエスケープ文字列を単一の文字に変換する関数です。
文字数を返却しますので、トレーニングとして、
この関数を呼び出して、全体文字列を変換する関数を
作成してみましょう。
(2015/06/21:機能拡張しました)
(2015/11/02:より精度のよい平方根関数 mySqrt を例として追加しました)
Nバイト長の浮動小数点演算関数群です。
浮動小数点演算命令を持たないCPUを使ったワンボード等
のプログラミングに役立ちます。
なお、ガンマ関数関連、双曲線関数、三角関数逆関数を追加しました。
また実用化を目指して、ローカルな関数名はNAまたはNFで始まるよう
全面的に統一化しました。
上記プログラムはテストプログラムのみです。
以下のインクルードファイルを組込んでください。
Nバイト長関数実体(NFloat.h)
実行時に、Run-Time Check Failure #2 - Stack around
the variable 'B' was corrupted.というエラーがでたら
「プロジェクト」「プロジェクトのプロパティ」から
「構成プロパティ」「C/C++」「コード生成」を選択し、
「基本ランタイムチェック」を「既定」に変更したのち、
再コンパイルして実行してください。
なお、動作確認はVisual C++ 2010で、8バイト長(64bits)、
16バイト長(128bits)、32バイト長(256bits)、64バイト長(512bits)、
128バイト長(1024bits)、256バイト長(2048bits)で行っています。
ただし、256バイト演算は遅さが目立ちます。
double, long double 等の替りに使用することができます。
1978年以降、大ブームになったインベーダゲームの原型、
PDP-1 の Space War ! を C 言語のコンソールアプリケーションで
再現してみました。なお、当時の画面の文字は、すべて半角文字ですが、
攻撃の爆弾を全角文字で表示しています。
当時と同じように Z で左シフト、X で右シフトにしています。
昔を偲んで、遊んでみましょう。
実行するには、以下のインクルードファイルを組込んでください。
コンソール画面制御(Console.h)
UNIX開発に貢献したケン・トンプソンが若い頃に熱中したゲームです。
公式名、別名も表示されます。
以下のライブラリを使っていますので、
ソースと同じフォルダにコピーしてください。
ソケット(WS2_32.LIB)入手先
Windows Socket APIの使用方法を理解するためだけの、
とにかく小さなサーバです。本来ならそれぞれの処理をスレッドに
分けるべきですが、WSAの理解の邪魔になりますので、
1クライアントにして、スレッド分解しなくても済むようにしました。
15と同様、WS_32.LIBを使っていますので、
ソースと同じフォルダにコピーしてください。
クライアントを用意するにあたって2015/7/19変更しました。
表示の間隔を詰めるよう2015/7/20変更しました。
Windows Socket APIの使用方法、マルチスレッドを理解するための、
チャット・サーバです。
クライアントはTelnetでも可能ですが、
終わる時$by[enter]の入力を忘れないでください。
15と同様、WS_32.LIBを使っていますので、
ソースと同じフォルダにコピーしてください。
Windows 7 以降で Telnet を有効にするには、
16のソースのコメントを参照してください。
実行時に、Run-Time Check Failure #2 - Stack around
the variable '・・・' was corrupted.というエラーがでたら
「プロジェクト」「プロジェクトのプロパティ」から
「構成プロパティ」「C/C++」「コード生成」を選択し、
「基本ランタイムチェック」を「既定」に変更したのち、
再コンパイルして実行してください。
上記17に対応するクライアント側プログラムです。
上記17と同様エラーハンドリング処理を若干サボっていますが
全体を見やすくするためですので、ご勘弁下さい。
15と同様、WS_32.LIBを使っていますので、
ソースと同じフォルダにコピーしてください。
実行時のRun-Time Check Failure #2 ・・・
に対する対処は上記17と同じです。
最初ホスト名を聞いてきますので、
localhostまたはIPアドレスを入力して下さい。
Your Name? に答えて、チャット開始です。
上記18のWindows版です。デザインは凝っていませんが、
自分でカッコいい画面を作ってみるのもよいかと思います。
15と同様、WS_32.LIBを使っていますので、
ソースと同じフォルダにコピーしてください。
実行時のRun-Time Check Failure #2 ・・・
に対する対処は上記17と同じです。
以下のファイルを「myWin.h」という名前で
インクルードファイルとして追加してください。
19. myWin.h
nbsp;年月を入力するとカレンダーを表示するプログラムです。
演習用に作りましたので、各関数の確認用関数も用意しています。
収束が非常に速い(4〜5回程度)πの計算プログラムです。
除算が乗算に比べて非常に遅い計算機のための逆数計算です。
N×Nの正方形のチェス盤の升目にどのクイーンも
同じ行,同じ列,斜めにならないよう置く問題です。
石の山から交互に石を取り、最後に石を取ったのが負け。
パスはできません。
結果例はDドライブのトップに生成するようにしていますので
自分の環境に合わせてファイル指示名を変更してください。
フーリエ変換の機能だけを使いたい場合,
以下のインクルードファイルが便利です。
フーリエ変換のインクルードファイル(Fourier.h)
Fourier.hを使ったプログラム例(Fourier_console.c)
通常のマージソフトは再帰的呼び出しで定義されますが、
再帰的呼び出しの部分を省略し、繰り返しで表現する方法です。
C.A.Hoare先生が考案したクイックソートのプログラム例です。
ニュートン法をデュラン、ケルナーが修正した方法。初期値をアッバースの方法で求めます。
以下は,複素数演算で演算子を使えるようにした定義です。
ただし,演算子定義はC++の機能ですので,
これを使うときはC++としてコンパイルしてください。
以下をインクルードファイルとしてコピー&ペーストしてください。
Complex.h
上記インクルードファイルを使ったDKA法のプログラムです。
演算子を使った表現ですので見やすくなっています。
演算子を用いた表現
上記インクルードファイルを使ったフーリエ変換関連プログラムです。
拙著Kindle版「複素数とフーリエ変換」のサンプルプログラムです。
複素数とフーリエ変換
文字列照合問題での3種類の手法を比較します。
WindowsでBitmapブラシを使って塗りぶすプログラム例を示します。
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
Windowsで線画を描く最も単純な例にもなっています。
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
拡張コッホ曲線です。 拡張コッホ曲線(Koch Curve)
Windowsで線画を描く単純な例です。
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
Windowsで線画を描く単純な例です。
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
乱数発生させて、
迷路を作成するコンソールアプリケーションです。
【Windows版】迷路作成
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
迷路の中にいるような雰囲気にするために
立体的にしてみました。
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
平面充填問題のC言語による表現例です。
C#による表現例もご参照頂ければ幸いです。
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
C言語を用いてWindows APIでメンガーのスポンジを描く例です。
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
変化する画像をお楽しみ下さい。
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
以下はセル数を200に拡張したバージョンです。
【セル数200に】
変化する画像をお楽しみ下さい。
黄色い生物は回りに赤い生物がいるとそれを食べてそこに黄色い生物が生まれ
赤い生物は回りに青い生物がいるとそれを食べてそこに赤い生物が生まれ、
…(省略)…
黒い生物は回りに黄色い生物がいるとそれを食べてそこに黒い生物が生まれ、
というモデル化でシミュレーションします。
最初は乱数を発生して初期値を設定していますので、
メチャメチャになっていますが、
次第に、生物の群落が形成されていきます。
一定規模の群落が形成されると群落が移動します。
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
以下は、Rectangleの替わりにSetPixelを使って高速化した例です。
絵は半分の大きさになります。
Rectangleの替わりにSetPixelを使った例
プログラミングは苦手だが、動画は楽しみたい方は以下を解凍して実行してみてください。
【実行形式のダウンロードへ】⇒
@右クリックで動きが止まります。止まった状態で右クリックすると再度動き始めます。
A止まった状態で左クリックすると1回だけ実行します。
B左クリックしながら、画面キャプチャすると動画作成用の画像を保存できます。
群落の形成 定常状態
プログラム中のEP(敵に食べられる確率)を1にすると
以下のように幾何学模様に近くなります。
群落の形成 定常状態
生物1に限って個体数変化をグラフ化してみました。
【個体数変化のグラフ表示】
個体数変化の様子が一定でないことが分かります。
|Z2+C|の値の剰余で絵を描きます。ただしCの値を変化させます。
変化する画像をお楽しみ下さい。
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
ちょっと変な気分になる歪んだ市松模様を描いてみました。
細い部分が薄くなっているように見えてしまいます。
歪んだ市松模様(その2)
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
こんな市松模様はいかがでしょう。
【フラクタルな市松模様】
【その1】 【その2】
市松模様をスライドさせてみます。左クリックで左移動、右クリックで右移動です。
【市松模様をスライドさせる】
いわゆる「市松模様の錯覚」を観察することができます。
市松模様を錯覚で立体に見せるためのペーパクラフト用の画像を表示します。
【市松模様・錯覚の立方体】
【市松模様・錯覚の立方体カラー版】
作り方
完成したもの(横から) 完成したもの(正面から) 片眼で視点を動かして見る
充填ジュリア集合を描く例です。
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
実数部 0.3 虚数部 0.2 実数部 -1.004 虚数部 -0.2512 拡大しても似たような絵が繰り返す
平面を4分割させながら、分割点を乱数で揺らぎを与えると地形図みたいな色マップになります。
仮想的な地形データとして使えます。「中点変位法」というそうです。
以下のインクルードファイル(.h)を使っていますのでインクルードファイルを組み込んでください。
myWin.h
上記を、より単純にしてみました。これでも十分使えそうです。
【より単純な地形生成】
生成した地形に関数系を付加
C#と同様、C言語でも陰線消去のプログラム例を示します。
以下のインクルードファイル(.h)を使っていますのでインクルードファイルを組み込んでください。
myWin.h
【絵を変える】
左クリックするたびに絵を変えるようにしました。
なお、この例は関数ポインタ配列の簡単な例題にもなっています。
【塗り潰しで陰線消去】
プロッタではこんなことはできませんが、画面表示だけを考えると。
遠い方から順に(i, j), (i, j-1), (i-1, j-1), (i-1, j)で囲まれる
閉多角形で塗りつぶすと、手前の図形で後が消えますので、
結果的に陰線消去になります。
なお、せっかくですから4点の高さの平均で閉多角形の色を変えました。
【Soft Fucus機能を入れてみた】
速度はちょっと遅くなりますが、画像にぼかし(Soft Fucus)機能を入れてみました。
なお、遅くてたまらないという人は、「int softFocus=true;」を「int softFocus=false;」に
変更して実行してください。
ランダムな地形を陰線消去で描く例です。
【ランダムな地形を陰線消去で描く】
線を描かない場合、傾斜の変化程度で明るさを変えるだけで立体的に見えます。
まじめに光のシミュレーションをしないで、サボる方法です。
【傾斜度合いで明るさを変える】
力学でよく出てくるポテンシャル曲線とトラジェクトリ。
平面的な図ではなかなかイメージがわかないが、立体的に描くとイメージがわきます。
以下は、最も簡単な振り子のポテンシャルエネルギーとトラジェクトリを立体表示する例です。
Y軸上にω(中央が0)、X軸上にθの2周期分、Z軸方向がポテンシャルエネルギーです。
【振り子のポテンシャルエネルギーとトラジェクトリ】
左クリックで絵を変える 塗り潰しで陰線消去 左図で線を描かないと 四角形を4分割した3角形で描く 右がぼかし機能を入れた表示 ランダムな地形を陰線消去で描く 傾斜で明るさを変える 振り子のポテンシャルエネルギー
プログラムではVK_SHIFTだけを確認しているが、以下のキーも確認してみよう。
VK_CONTROL, VK_MENU(Altキー用), VK_LSHIFT, VK_RSHIFT,以下のインクルードファイル(.h)を使っていますのでインクルードファイルを組み込んでください。
VK_LCONTROL, VK_RCONTROL, VK_LMENU, VK_RMENU
myWin.h
C#と同様、立体の座標変換の例を示します。
以下の2つのインクルードファイル(.h)を使っていますので
インクルードファイルを組み込んでください。
myWin.h
my3Dmat.h
C#と同様、レイトレーシング法による立体描画のプログラム例を示します。
単体の球 球と床 映込みのある球 映込みなし 映込みあり 映込みあり
以下の2つのインクルードファイル(.h)を使っていますので
インクルードファイルを組み込んでください。
myWin.h
my3Dmat.h
なお、2016/01/11、my3Dmat.hに立体モデル定義を追加しました。
C#と同様、図形演算のプログラム例を示します。
和(A ∪ B) 積(A ∩ B) 差(A − B)
以下の2つのインクルードファイル(.h)を使っていますので
インクルードファイルを組み込んでください。
myWin.h
my3Dmat.h
なお、2016/01/11、my3Dmat.hに立体モデル定義を追加しました。
【手法の概要】
以下の表のように演算相手の内部/外部を判定して表面を描画する。
演算の種類 表記 描く部分(Aの表面) 描く部分(Bの表面) 和 (合体) A ∪ B Bの外部(!in(B)) Aの外部(!in(A)) 積 (共通) A ∩ B Bの内部( in(B)) Aの内部( in(A)) 差(カット) A − B Bの外部(!in(B)) Aの内部( in(A))
描く部分がA, B 共に存在する場合、視点に近いほうを描く。
透明な物体の描画プログラム例例を示します。
屈折率が1より大きい場合 屈折率=1のとき 屈折率が1より小さい場合
以下の2つのインクルードファイル(.h)を使っていますので
インクルードファイルを組み込んでください。
myWin.h
mySmodel.h (立体モデル定義)
立体に模様付けする方法で最も簡単な「ソリッドテクスチャリング」のプログラム例を示します。
テクスチャ画像 模様付けした球体
以下のbmpファイル, リソースファイル(.rc),
2つのインクルードファイル(.h)を使っていますので
それぞれ組み込んでください。
bmpファイル(woodtx.bmp)
リソースファイル(woodtx.rc)
myWin.h
mySmodel.h (立体モデル定義)
画像をファイルから読み込む場合、以下のプログラムが参考になります。
画像ファイル(JPEG/GIF/BMP)の読込み
テクスチャマッピングでサッカーボールを描くプログラム例を示します。
テクスチャ画像が小さいのでギャザが目立ちますが、
気に入らない方はもっと大きな画像を用意してチャレンジしてみて下さい。
テクスチャ画像 模様付けした球体
以下のbmpファイル, リソースファイル(.rc),
2つのインクルードファイル(.h)を使っていますので
それぞれ組み込んでください。
bmpファイル(ball.bmp)
リソースファイル(ball.rc)
myWin.h
mySmodel.h (立体モデル定義)
バンプマッピングでデコボコ感を描くプログラム例を示します。
マッピング画像 バンプマッピングによる球体
以下のbmpファイル, リソースファイル(.rc),
2つのインクルードファイル(.h)を使っていますので
それぞれ組み込んでください。
bmpファイル(bump.bmp)
リソースファイル(bump.rc)
myWin.h
myView.h (立体モデル定義および共通関数)
表面が鏡のような素材の球を描くプログラム例を示します。
プログラム例では、球の周りをマッピング画像で取り囲んでいるものとします。
マッピング画像 球体
以下のbmpファイル, リソースファイル(.rc),
2つのインクルードファイル(.h)を使っていますので
それぞれ組み込んでください。
bmpファイル(back.bmp)
リソースファイル(back.rc)
myWin.h
myView.h (立体モデル定義および共通関数)
「リフレクション(reflection : 反射)」と「りフラクション(refraction : 屈折)」は
日本語的には紛らわしく聞こえますが・・・
ガラス玉のように屈折率の大きい素材の球を描くプログラム例を示します。
屈折率は、石英ガラスと同様 1.5 程度にしました。
なお、プログラム例では、球の周りをマッピング画像で取り囲んでいるものとします。
以下は、色付き、かつ透明度を指定できるようにしたバージョンです。
色と透明度を指定するバージョン【リフラクションマッピング】
マッピング画像 球体 赤く透明な球体 透明度を10%ずつ変化させる 屈折率を変化させる
以下のbmpファイル, リソースファイル(.rc),
2つのインクルードファイル(.h)を使っていますので
それぞれ組み込んでください。
bmpファイル(back.bmp)
リソースファイル(back.rc)
myWin.h
myView.h (立体モデル定義および共通関数)
左ボタンをクリックすると演奏開始、右ボタンをクリックすると演奏を停止します。
チャネル番号を変えて音質を変えたり、楽譜データを変更して遊んでみましょう。
MPEG3再生プログラム例です。
好きな音楽が入っているMPEG3ファイルを指定してみましょう。
アプリケーション作りに役立つと思います。
以下のインクルードファイル(.h)を使っていますので
組み込んでください。
myWin.h
MPEG3ファイルを再生するといっても,MPEG3ファイルがないと困りますね。
そこで私が編曲した曲を用意しました。
ダウンロードするには,右ボタンクリックで
「対象をファイルに保存」を選択してください。
ついでに,稚拙かもしれませんが私が作曲した曲も。
MIDIで作ったものをMP3に変換したものです。
AVIファイル再生プログラム例です。
アプリケーション作りに役立つと思います。
なお、このプログラムは、AVIデバイスハンドラが組み込まれていないと動作しません。
以下のインクルードファイル(.h)を使っていますので
組み込んでください。
myWin.h
WAVファイル再生プログラム例です。
アプリケーション作りに役立つと思います。
以下のインクルードファイル(.h)を使っていますので
組み込んでください。
myWin.h
クリップボードの画像をBMPファイルとして出力しますので、
最初、画面右上付近の「prt sc」キーを押してから実行します。
左ボタンをクリックするとファイル保存ダイアログボックスが表示されますので、
保存ファイル名を指定します。
プログラムで生成した画像をファイル出力する際の参考になると思います。
BMPファイルの構造を勉強するための例にもなると思います。
以下のインクルードファイル(.h)を使っていますので
組み込んでください。
myWin.h
なお、以下は画像ファイルを入力して表示するプログラムです。
画像ファイル(JPEG/GIF/BMP)の読込み
GDI+を使えば、もっと色々な形式の画像ファイルを入力して表示できます。
GDI+を使って
(2016/03/19 ファイル・表示メニューおよび拡大・縮小機能を追加しました)GDI+の入手先は以下のとおりです。古いバージョンで確認用でも良ければ【ここで】
【GDI+入手先】以下から頒布用のGDIが入手できます。
Platform SDK Redistributable: GDI+
Windows APIのスクラッチモードで縮小すると画像が汚くなること、
回転等の処理ができない等の理由で、C#等にある機能を自作してみました。
以下のbmpファイル, リソースファイル(.rc),
2つのインクルードファイル(.h)を使っていますので
それぞれ組み込んでください。
bmpファイル(suzume.bmp)
リソースファイル(suzume.rc)
myWin.h
なお、ファイルから入力してスクラッチモードで表示、
かつスタティックコントロールに表示する参考例を以下に示します。
画像ファイル入力・表示
ナンプレパズルを自動生成する例です。
なお、簡単化のためにゲーム部分は数字を指定した時点で正解かどうかを表示しますが、
ナンプレパズルの醍醐味は最後までやらないと正解かどうかが分からないということ。
この辺の工夫は皆様にお任せします。ということで「ゲームもどき」と題しました。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
以下のバージョンは、数字を見せる場所を指定する方法です。
【数字を見せる場所を指定する】
ただし、複数解がある場合ランダムにマス目を増やします。
したがって、指定された場所以外も見せる場所になることもあります。
スクロールバーや行/列の挿入・削除、番号の付け替え等のプログラム例にしました(2016/02/07)。
- セルのデータをどう扱うかはユーザの勝手。したがってセルのデータ型はすべて文字列。
- なお、入力はエディットウィンドウに任せています。
- すべてソースプログラムでどう扱っているかわかっているので安心です。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
キーボードイベントを使っていますので、初心者のために
超簡単なキーボードイベントを使ったプログラム例を示します。
【キーボードイベントの簡単な例】
他のアプリケーションに組み込みやすくするために
インクルードファイル化(GRD.h)化しました。
GRD.h
(201602/09 エディットボックスでの[enter]キー入力で「OK」ボタンと同じ処理にしました)
(201602/10 エディットボックスでの[cancel]または[ctrl]+[break]入力でCancel処理実行、
またCancel処理時にフォーカスがエディットボックスに留まるようにしました)
上記 GRD.h (myWin.hをインクルードしている) を使ったプログラム例です。
かなり簡単なプログラムに見えるかと思います。
【GRD.hおよびmyWin.hを使った例】
ちょっとくだらないかもしれませんが、マウスがボタンの上を通り過ぎるとき、
ボタンの文字色を変え、説明文を表示するプログラム例です。
ユーザの気をひくとき使えるかも…。
ボタンの上にないとき ボタンの上にあるとき クリックしたとき エディットボックスの色を変える
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
リソースファイルを指定してカスタムダイアログボックスでやれば簡単なのですが、
標準コントロールの色を変更するには、WM_CTLCOLORSTATIC、WM_CTLCOLOREDIT等の
メッセージ処理で文字色や背景色を変更するしかない。面倒ですが…
以下はエディットボックスの背景・文字色を変えてみた例です。
【エディットボックスの背景と文字色を変える】
ボタンの表示方法を変えてみました。こちらのほうが目立つかも? 【上記のボタンの表示方法の変更】
上記「63.ボタンの色と説明文」の方法では、起動直後のボタンの色を変更することはできません。
そこで、古臭い方法ですが、こんなプログラムを作ってみました。
ユーザの気をひくとき使えるかも…。
マウスを移動すると ボタンを選択したら ユーザ指定の関数が実行される
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myButton.h
myWin.h
イベントの判定部分はWindows上の約束事。約束事に縛られた部分が見えるのは煩わしいもの。
そこで、イベント判定部分を隠すインクルードファイルを作ってみました。
例題プログラムはかなりすっきり見えるかと思います…。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
hideEvent.h
myWin.h
ウィンドウのメニューハンドラを番号自動生成し、コマンド判別も隠してみました。
例題プログラムhideEvent.h
EVCM.h
myWin.h
再帰的アルゴリズムの最初に説明されるのがこの「ハノイの塔」。
これをアニメーションで表示するようにしてみました。
円盤の描画は、若干凝っています。
円盤の数は10枚までを確認しています。
それ以上のときは配列サイズを大きくしてチャレンジしてください。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
以下は、表示部分とハノイの等の解を求める部分をマルチスレッド化することで
履歴を保存するための配列をなくした例です。
マルチスレッドにおけるランデブー制御の例題ともなっています。
マルチスレッド版「ハノイの塔」
以下は、表示用スレッドを生成せず(ハノイの等の解を求める部分のみ子スレッド化)
親スレッドのタイマー処理で表示するようにした例です。
こちらの方が単純です。
改良マルチスレッド版「ハノイの塔」
弦の振動のシミュレーションプログラム例です。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
熱拡散方程式プログラム例です。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
障害物がある流体の解析プログラム例です。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
二次元波動方程式により波のシミュレーションを行うプログラム例です。
実行が遅いですが、numX、numYを小さくして動かすこともできます。
(2016/02/16 バグ修正、および表示方法変更による高速化を行いました)
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
レナールドジョンズ(Lennard-Jones)ポテンシャルによる
分子動力学的なシミュレーションを行うプログラム例です。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
バネのように伸縮する棒と2つの球の組合せです。
(バネは一定程度短くなると、それ以上縮みませんが、このシミュレーションでは考慮していません)
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
円柱周りを流れる流体のシミュレーションプログラム例です。
手順的にはフラクショナルステップ法、近似解法としては3次精度まで考慮、
差分法としては上流差分法(いわゆる風上差分)を用いています。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
花火のシミュレーションプログラム例です。
パラメータ、爆発タイミング等を変更して色々な花火をシミュレーションしましょう。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
手持ち花火のシミュレーションはいかがでしょう。
なお、火の粉の先頭の円を大きく描いたり、星形にするバージョンも併せて示します。
どれが花火っぽいでしょうか?
手持ち花火のシミュレーション
火の粉の先頭の円を大きく描く
火の粉の先頭を星形に
手持ち花火 火の粉の先頭を大きく 火の粉の先頭を星形に
画像表示時のラスターオペレーション使用例です。
図形を変更したり、使用例にないオペレーション等を試してみましょう。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
パソコンのキーボードをピアノの鍵盤がわりにして音(MIDI音源)を出す例です。
キーボードでは一緒に押せないキーがあるので、マウスクリックでも音を出せるようにしました。
パソコンのキーボードは音楽用ではないので、結構操作が大変ですが、
左手で和音を、メロディをマウスでとやると簡単な音楽は弾けます。
2016/02/27 音色調査用として使えるように左右カーソルで音色変更、
上下カーソルで音の強さを変化させるようにしました。
音色のコードについては以下が参考になります。
General MIDI(Wikipedia)
その他、プログラム構成、画面デザインを整理しました。
以下は、楽器をリストボックスで選択できるようにしたバージョンです。
楽器を選択して音色の確認
プログラミングはおっくうだが、ツールとして使い人のために実行形式のダウンロード。
楽器を選択して音色の確認[実行形式]
低い音 ド ド# レ レ# ミ ファ ファ# ソ ソ# ラ ラ# シ (ド) (ド#) 対応キー Z S X D C V G B H N J M , L 高い音 ファ ファ# ソ ソ# ラ ラ# シ (ド) (ド#) 対応キー Q 2 W 3 E R 5 T 6 Y 7 U I 9
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
楽器を選択して音色を確認するバージョンの表示例です。
整数値からMIDIファイルのデルタタイム等に使われる可変長数値への変換を作ってみました。
コンソールアプリケーションです。
【参考:可変長数値への変換】
MIDIのドラムマップの打楽器の名前からだけでは、音をイメージするのは困難です。
そこで、こんなプログラムを作ってみました。
ボタンをクリックするだけで音を確認できます。
実行形式
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
(1016/03/01 WAV再生部分を組み込みました)
例題では1秒間だけのバッファを用意し、波のデータを設定する例を示します。
色々な波形を指定してみましょう。
なお、本プログラムは単純化するためコンソールアプリケーションとして作成してあります。
生成されたWAVファイル例
波形の生成例として、日本語の母音を生成してみました。
日本語の母音
(1016/03/01 WAV再生部分を組み込みました)
(1016/03/03 立上がり部分を滑らかにしました。この方がより自然かも)
生成されたWAVファイル例
日本語の母音に音階を付けてみました。
音階が付いた日本語の母音
生成された音
かなりいい加減ですが、適当ですが子音Pもどきを作ってみました。
ずいぶんサボってますが「パピプペポ」に聞こえます。
ちゃんと子音を生成するには、音声合成関連の文献等を参照してください。
これは、あくまで「もどき」です。
子音Pもどき
生成されたWAVファイル例
同様に、かなりいい加減ですが、適当ですが子音Mもどきを作ってみました。
ずいぶんサボってますが「まみむめも」に聞こえますか?
自然な音声を出せる素材接続法が主流ですが、子音の奥深さを理解していただくために
HMM合成法のプログラム例を示します。
なお、ちゃんと子音を生成するには、音声合成関連の文献等を参照してください。
これは、あくまで「もどき」です。
子音Mもどき
ぱぴぷペぽどき
(2016/03/02「白色雑音」, 「周波数指定雑音」を追加しました)
周波数とその構成、エンベローブパターンを指定して色々な音を作りましょう。
「78.WAVファイルの生成」のWindows版として作成しました。
周波数や構成パターンを変えて色んな音を作りましょう。
実行形式
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
「さくらさくら」をMIDI音源を使って演奏する例を示します。
MIDI音源のイメージが沸くようにするため音のデータを配列化しました。
楽器は、フルートと琴にしてありますが、自由に変えましょう。
楽器のコードについては、76.の「楽器を選択して音色の確認」を参照して下さい。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
振り子をたくさんつなげて多重振り子を作るのは大変かもしれません。
そこで、多重振り子のシミュレーションプログラムを作ってみました。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
コンソールアプリケーションでC++/CLIが使えるか確認してみました。
例題は、コンソールアプリケーションでGIFファイルを出力する例です。
なお、以下の準備を行ってください(これをやらないとコンパイルエラーになります)。
@コンソールアプリケーションで「空のプロジェクト」を選びます。
A「プロジェクト(P)」、「…のプロジェクト」(…はプロジェクト名)を指定する。
Cプロパティページの左側の「構成プロパティ」を選択する。
D「プロジェクトの既定値」の「共通言語ランタイムサポート」で
「共通言語ランタイムサポート(/clr)」を選択する。
E以下のように設定したら「OK」ボタンをクリックする。
MIDI音源を利用してドラムパターンを演奏する例です。
リズムや打楽器を選んで色々なパターンを作りましょう。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
干渉縞による動く模様を表示します。
干渉される側のズレを調整して色々な模様にしましょう。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
子供の頃、干渉縞で遊んだことのない人のために以下を追加しました。
【干渉縞で模様が動く原理】
表示の仕組み 表示例
カラー画像をミックスして、干渉縞を動かすたびに画像が切り替わります。
【カラー画像をミックスして干渉縞を動かす】
以下のbmファイル(.bmp)、リソースファイル(.rc), インクルードファイル(.h)を
使っていますので組み込んでください。p1.bmp
p2.bmp
picture.rc
myWin.h
干渉縞が動くたびに 表示部分が変化 そして繰り返す
4カラー画像をミックスして、格子縞を動かすと4画像が切り替わります。
【4カラー画像をミックスして格子縞を動かす】
以下のbmファイル(.bmp)、リソースファイル(.rc), インクルードファイル(.h)を
使っていますので組み込んでください。p1.bmp
p2.bmp
p3.bmp
p4.bmp
picture.rc
myWin.h
4画像をミックスした画像 格子縞 繰り返す
(2016/03/17「鮮明化」機能を追加しました)
(2016/03/17「明暗強調」機能を追加しました)
こんなことツールでできるじゃないかと言われそうですが
ツール提供者側の気持ちになって、あえてプログラムでやる方法を示します。
なお、「60.任意の四角形内に画像を描く」、「59.BMPファイルの出力」の
【GDI+を使って】もぜひ参照して下さい
以下のbmファイル(.bmp)、リソースファイル(.rc), インクルードファイル(.h)を
使っていますので組み込んでください。p1Z.bmp
picture3.rc
myWin.h
次のバージョンはRGBの比率等で色合いを変える機能、
基本的なコピー機能等を付加したバージョンです。
【色彩関連機能、複写機能追加】
【鮮明化】
【明暗強調(コントラスト)】
【RGB比率】(単純にRGBの比率で色をミックスする例です)
【RGB明暗】(RGBを0x00〜0xFFまで変化させます。すべて50%で元の画像になります)
【画像の一部分複写】(範囲指定の枠表示とコピー先指定時の画像移動の例です)
「明暗強調(コントラスト)」機能ではいわゆるトーンカーブによる処理を行っています。
本格的なツールを目指すには、以下のようなトーンカーブを示す多項式の係数を求める
機能を組み込む方がよいでしょう。
【トーンカーブの係数を求める】
以下はトーンカーブをスプライン補間で求めるバージョンです。
多項式補間とスプライン補間、どちらが好みでしょう?
【スプライン補間によるトーンカーブ】
以下は、トーンカーブを指定して「明暗強調」機能を実行できるようにしたバージョンです。
曲線はスプライン補間を用いています。
なお、トーンカーブ指定のダイアログボックスにPOPUPWINDOW指定を行っていますので、
myWin.hのWinMainに1行、変数宣言に「HWND hwDlg=NULL;」を追加しています。
【トーンカーブを指定して明暗強調】
以下のbmファイル(.bmp)、リソースファイル(.rc), インクルードファイル(.h)を
使っていますので組み込んでください。p1Z.bmp
picture3.rc
diag1.rc
myWin2.h
上記バージョンのコマンドボタン部分をすべてメニュー化し、整理しました。
メニュー化することで機能を簡単に増やすことができますので
編集機能らしきもの、ファイルの入出力等を増やしました。
なお、デバッグモードのとき終わるときエラーになりますので、
曲線はスプライン補間を用いています。
「デバッグなしで開始(H)」で実行するか、エラーを無視して下さい。
また32ビットBMP出力処理をサボっていますので、環境によっては
出力ファイルの再読込みができない場合があります。
そのときは、「59.BMPファイルの出力」に示す「GDI+を使って」のプログラム、
または「ペイント」などの適当なソフトで「読込み」「上書き保存」して読み込んで下さい。
【メニュー化して機能追加しやすく】
機能追加しやくすなりましたので、アルゴリズム検討等に役立てたり、
機能付加して充実させることも可能かと思います。
以下のリソースファイル(.rc), インクルードファイル(.h)を
使っていますので組み込んでください。diag1.rc
diag2.rc
myWin2.h
詳しい式の説明については、拙著「ExcelとVBAによる実用数値解析入門」の
「5.4 スプライン補間 (6)もうひとつの簡便法」を参照してください。
固定境界条件{{1,1},{1,1}} 固定境界条件{{-1,-1},{-1,-1}} 自然境界条件
並列実行でも逐次実行と同一結果を保証するためのアルゴリズムです。
これはツイッターで尾崎隆大様との議論の中で出てきたアルゴリズムが
正しいかどうかを確認するためにシミュレーションしたものです。
音色を合成するコンソールアプリケーションです。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
wavFile.h
以下はWindow版のソースプログラムです。BR>
Windows版Cソースプログラム
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
なお、実行だけを確認して見たい方は以下をダウンロードし、
解凍後、フォルダー内のtoneColorGen.exeを実行してください。
Windows版実行形式
MIDIファイルを読み込んで再生するプログラムです。
機動直後にファイル名を指定します。
停止するには右ボタンをクリックします。
別ファイルを読み込むには左右ボタンをクリックします。
以下のインクルードファイル(.h)を使っていますので組み込んでください。
myWin.h
MIDIファイルを再生するといっても,MIDIファイルがないと困りますね。
そこで私が編曲した曲を用意しました。
ダウンロードするには,右ボタンクリックで
「対象をファイルに保存」を選択してください。
ついでに僭越ながら私が稚拙ながら作曲した曲も紹介します。
【参考】 拡張子とデバイス名対応
mid=Sequencer, rmi=Sequencer, midi=Sequencer
wav=waveaudio, avi=AVIVideo, cda=CDAudio
aif=MPEGVideo, aifc=MPEGVideo, aiff=MPEGVideo, au=MPEGVideo
m1v=MPEGVideo, m3u=MPEGVideo, mov=MPEGVideo, mp2=MPEGVideo
mp3=MPEGVideo, mpa=MPEGVideo, mpe=MPEGVideo, mpeg=MPEGVideo
mpg=MPEGVideo, mpv2=MPEGVideo, qt=MPEGVideo
snd=MPEGVideo, asf=MPEGVideo2
CRC-CCITTの符号を計算するプログラム例です。
誤り符号の学習に役立つと思います。
生成多項式は、X16 + X12 + X5 + 1 です。
CRC計算時の除算は減算ではなく,排他的論理和を使います。
代数的な除算と違いますので,感覚を掴んでもらうために
以下のプログラムを作ってみました。
CRC計算時の除算イメージの確認
CRCの計算時の除算イメージ CRC受信時の除算イメージ
TCP/IPのヘッダでのチェックサム符号を計算するプログラム例です。
TCP/IPの誤り符号の学習に役立つと思います。
水平垂直パリティ符号を計算するプログラム例です。
通信の誤り符号の学習に役立つと思います。
BCCのチェックでエラーかどうかを判定するプログラム例です。
0のときエラーなし,1ビットだけのエラーのとき訂正符号,
2ビット以上のエラーのとき訂正不能として0xFFを返却します。
BCCエラー訂正符号の計算
群計数チェック符号を計算するプログラム例です。
通信の誤り符号の学習に役立つと思います。
4B3T符号を計算するプログラム例です。
参考のためにその他の符号のグラフも表示しています。
伝送路符号の学習に役立つと思います。
以下のインクルードファイル(.h)を使っていますので、
インクルードファイルを組み込んでください。
myWin.h
マージソートの再帰呼び出しを省略するソートのプログラム例です。
ビット演算で集合演算を実装する例です。
実行時、次のように入力します。
- 集合への追加
add <要素番号> in <変数名> または add <要素番号> into <変数名>
または add <要素番号> <変数名>
- 集合から削除
del <要素番号> from <変数名> または del <要素番号> in <変数名>
del <要素番号> <変数名>
- 集合に入っているかどうかのチェック
check <要素番号> in <変数名> または check <要素番号> <変数名>
- 代入
<左辺の変数名> = <式>
- 式
<変数名> or <変数名> または <変数名> and <変数名> または <変数名> dif <変数名>
なお、演算子は以下を示す。
or : 和集合(Union), and : 積集合(Intersection), dif : 差集合(Difference)
畑政義氏(京都大学)が発案した写像方法でフラクタルを描いてみました。
上記5のmyWin.hを使っていますので、
同様にインクルードファイルとしてコピー&ペーストしてください。
myWin.h
画像はこちら⇒
以下は,パラメータを少しずつ変化させて色々なフラクタルを
アニメーション風に表示する例です。
アニメ風畑政義写像
複素数演算で演算子を使えるようにしてみました。
ただし,演算子定義はC++の機能ですので,
これを使うときはC++としてコンパイルしてください。
以下をインクルードファイルとしてコピー&ペーストしてください。
Complex.h
上記インクルードファイルを使ったソースプログラムです。
演算子を使った表現ですので見やすくなっています。
演算子を用いた表現
以下は,畑政義写像の第2式の最後の1を一般の複素数にして拡張した例です。
写像で描かれる画像の幅が広がります。
拡張畑政義写像
Complex.hを使って複素関数のマップを表示してみました。
以下のインクルードファイルを使っていますのでコピー&ペーストしてください。
myWin.h
Complex.h
ガンマ関数のグラフを表示してみました。
以下のインクルードファイルを使っていますのでコピー&ペーストしてください。
myWin.h
エノン写像を表示してみました。
以下のインクルードファイルを使っていますのでコピー&ペーストしてください。
myWin.h
ロジスティック写像の周期倍分岐を表示してみました。
以下のインクルードファイルを使っていますのでコピー&ペーストしてください。
myWin.h
世界最古のアトラクタ「ジャパニーズ・アトラクタ」を描いてみました。
以下のインクルードファイルを使っていますのでコピー&ペーストしてください。
myWin.h
ローレンツ・モデルを描きました。
以下のインクルードファイルを使っていますのでコピー&ペーストしてください。
myWin.h
「宣教師と人食い人」問題を解くプログラムです。
アルゴリズムとしては反復深化(iterataive deeping)を使っています。
コンソール・アプリケーションです。
積み木問題を解くプログラムです。
アルゴリズムとしては反復深化(iterataive deeping)を使っています。
ブロック数Nとすると最低手順数を2N-1とし、
前回動かしたブロックを元に戻す操作を行わないものとして
試行回数を減らしています。
以下のインクルードファイルを使っていますのでコピー&ペーストしてください。
myWin.h
CPUスケジューリングのFCSをシミュレーションするプログラムです。
コンソールアプリケーションです。
多重レベル・フィードバック行列でCPUスケジューリングのシミュレーションを行います。
コンソールアプリケーションです。
仮想的なマシンのアセンブラと,そのエミュレータです。
逐次実行で1ステップずつ実行して
レジスタやメモリの内容を確認しながら追うことができますので,
アセンブラ学習用に使えます。
新しいCPUができてそのエミュレータを作成するときの
プログラミングパターンの参考としても使えます。
以下のインクルードファイルとリソースファイルを使っていますので
コピー&ペーストしてください。
myWin.h
emdiagA.rc
以下の画像をクリックすると拡大できます。
誤差拡散ディザリングの各種手法を比較するためのプログラムです。
実行だけ確認してみたいあるかたは,
以下の実行形式を解凍してお使いください。
実行形式の圧縮ファイル
各種手法を数字で指定することにしていますので,
自分のアイディアを試してみることもできます。
私がお勧めする方法も
"My Reccomendable Dithering"と称して紹介していますので
試していただければ幸いです。
組み込み計算機で処理されることが多いので
速度面では,乗除算をシフト演算に置き換えることが
できるような値(2のべき乗)が望ましいでしょう。
考え方について知りたい方は,
は拙著Kindle版「C言語とAPIによる画像処理」の
第7巻,第8巻をご参照下さい。
以下のインクルードファイル, リソースファイル,bmpファイルを使っています。
myWin.h
kodomo.rc
kodomo.bmp
【実行画面例】
8色によるFloyd-Steinberg Dithering 白黒2色によるJNNアルゴリズム 256色によるSiera Dithering 元の画像(24ビット色)
配列ディザリングの各種手法を比較するためのプログラムです。
[2017/05/30 ディザタイル5ブロック,8ブロックを追加しました]
[2017/05/31 Supercell, Modified Randomを追加しました]
実行だけ確認してみたいあるかたは,
以下の実行形式を解凍してお使いください。
実行形式の圧縮ファイル
考え方について知りたい方は,
は拙著Kindle版「C言語とAPIによる画像処理」の
第7巻,第8巻をご参照下さい。
以下のインクルードファイル, リソースファイル,bmpファイルを使っています。
myWin.h
diag.rc
kodomo.rc
kodomo.bmp
【実行画面例】
以下は,上記ディザリング結果の一部を拡大した画像です。
なお,拙著Kindle版「C言語とAPIによる画像処理」第8巻で,3×3ディザ行列を導入していますが,
その根拠を示していませんでした。
3×3ディザ行列は以下のようなハーフトーン・パターンから導くことができます。
なお,導き方は,拙著Kindle版「C言語とAPIによる画像処理」第7巻,7.1節(3)で説明しています。
【ディザタイルでの計算方法】
本プログラムでは,ディザタイルの配列を用意しているわけではありません。
まず,簡略形 M[i,j] = ( i + (N - 3)×j) Mod Nとし,
色値とd[i,j] = 255×(1 + M[i,j])/(1 + N)との大小比較で
高低値の採用を判定しています。
タイル値を配列として用意しているわけではありませんが,
結果的には,以下のディザタイルを用意したことと同じになります。
なおプログラムでは,d[i,j] = (1 + M[i,j])/(1 + N)の
計算を容易にするために,M[i,j] + 1 の値を変数に代入しています。
【8色Diher Tileの例】
以下は,上記ディザリング結果の一部を拡大した画像です。
C言語用のBignumber計算処理です。
コンソールアプリケーションです。
演算部分をインクルードファイル化しました。
ただし,領域削減のために配列をint型からchar型に変更しています。
bignum.h
以下は上記インクルードファイルを使ったプログラム例です。
BigNumC2
以下は本プログラムでπの1000桁を計算した例です。
π = 3.
14159 26535 89793 23846 26433 83279 50288 41971 69399 37510
58209 74944 59230 78164 06286 20899 86280 34825 34211 70679
82148 08651 32823 06647 09384 46095 50582 23172 53594 08128
48111 74502 84102 70193 85211 05559 64462 29489 54930 38196
44288 10975 66593 34461 28475 64823 37867 83165 27120 19091
45648 56692 34603 48610 45432 66482 13393 60726 02491 41273
72458 70066 06315 58817 48815 20920 96282 92540 91715 36436
78925 90360 01133 05305 48820 46652 13841 46951 94151 16094
33057 27036 57595 91953 09218 61173 81932 61179 31051 18548
07446 23799 62749 56735 18857 52724 89122 79381 83011 94912
98336 73362 44065 66430 86021 39494 63952 24737 19070 21798
60943 70277 05392 17176 29317 67523 84674 81846 76694 05132
00056 81271 45263 56082 77857 71342 75778 96091 73637 17872
14684 40901 22495 34301 46549 58537 10507 92279 68925 89235
42019 95611 21290 21960 86403 44181 59813 62977 47713 09960
51870 72113 49999 99837 29780 49951 05973 17328 16096 31859
50244 59455 34690 83026 42522 30825 33446 85035 26193 11881
71010 00313 78387 52886 58753 32083 81420 61717 76691 47303
59825 34904 28755 46873 11595 62863 88235 37875 93751 95778
18577 80532 17122 68066 13001 92787 66111 95909 21642 01989
旧暦を計算して六曜を求めます。
コンソールアプリケーションです。
【実行画面例】
ΣΔADCのシミュレーションを4ビットで行います。
コンソールアプリケーションです。
信号処理の学習の一助になるかと思います。
なお,8ビット,16ビット等に拡張してみるのも一興かと思います
以下は二次ΣΔADCシミュレーションのソースプログラムです。
二次ΣΔADCシミュレーション
シミュレーションプログラムではCSVファイルを出力しますので,
Excelでグラフ化しました。
【実行結果のグラフ例】
伝達関数の分母・分子の関数を変更するだけで,
振幅周波数特性の値を表示するプログラムです。
簡単なコンソールアプリケーションですが,
以下のC++用のインクルードファイルを用いていますので,
C++としてコンパイルしてください。
また,以下をインクルードファイルとしてコピー&ペーストしてください。
Complex.h
ハフマン符号化のアルゴリズムを確認するためのプログラムです。
簡単なコンソールアプリケーションです。
学習用に作成しましたが,ファイル入出力を追加して,
拡張してみるのも一考かと思います。