ソースプログラムを覗いてみよう!!

【書籍等の購入はこちら⇒】


【C言語ソースプログラム】


【C言語によるコンソール画面制御】 http://www.souzousha.iinaa.net/IntroductionToC/index.htm#console
【C言語によるマルチスレッド】 http://www.souzousha.iinaa.net/IntroductionToC/index.htm#multiTh

【VBA/Excel式定義】   【VB.net】   【C#.net】   【Android Java】   【C言語】   【Prolog】 【Python】

【C言語とAPIによるWindowsプログラミング入門】ソースプログラム例

【C言語とAPIによる画像処理】ソースプログラム例

C言語による【言語処理学習用データ型自由なミニ言語(Type Free Mini Language)】


なお,VS2019以降は,最初の新規プロジェクト作成の
「空白」プロジェクトの指定が複雑になりました。

【目次】

  1. 整数関連
  2. 実数関連
  3. 四元数関連
  4. ニューロネットワーク逆伝播法による学習
  5. グモウスキーとミラの写像
  6. マンデルブロ集合
  7. 反復関数系(Iterated Function System)
  8. マインスウィーパ
  9. 逆ポーランド記法への変換と実行
  10. 数字の英語読みを表示する
  11. C言語の注釈を無視する
  12. エスケープ文字列変換
  13. Nバイト長浮動小数点演算
  14. C言語による Space War !
  15. ホスト名から公式名・別名・IPアドレスを得る
  16. WSAを理解するための小さな小さなサーバ
  17. 小さなチャット・サーバ
  18. 小さなチャット用クライアント
  19. チャット用クライアントWindows版
  20. カレンダー表示
  21. 収束が非常に速いパイ(π)の計算
  22. 除算を使用しない逆数計算
  23. 8王妃(eight qeen)問題
  24. 石取りゲーム
  25. 離散的フーリエ変換(DFT)
  26. 非再帰マージソフト
  27. クイックソート
  28. DKA法による高次代数方程式の解法
  29. 文字列照合における力任せ法,KMP法,BM法の比較
  30. WindowsでBitmapブラシを使う
  31. コッホ曲線(Koch Curve)
  32. ヒルベルト曲線(Hilbert Curve)
  33. シェルピンスキ曲線(Sierpinski Curve)
  34. 迷路作成
  35. 迷路の3D表示
  36. 平面充填問題
  37. メンガーのスポンジを描く
  38. 平面セルオートマトン
  39. N巴の食物連鎖(food chain of N cycles)
  40. 複素数で描く
  41. 歪んだ市松模様
  42. 充填ジュリア集合
  43. 仮想的な地形生成
  44. 陰線消去
  45. キー入力の確認
  46. 立体の座標変換
  47. 立体描画(Ray Tracing method)
  48. 図形演算
  49. 透明な物体の描画
  50. ソリッドテクスチャリング(Solid Texturing)
  51. テクスチャマッピング(Texture Mapping)
  52. バンプマッピング(Bump Mapping)
  53. リフレクションマッピング(Reflection Mapping)
  54. リフラクションマッピング(Refraction Mapping)
  55. MIDIで音楽演奏
  56. MPEG3ファイルの再生
  57. AVIファイルの再生
  58. WAVファイルの再生
  59. BMPファイルの出力
  60. 任意の四角形内に画像を描く
  61. ナンプレパズルの自動生成とゲームもどき
  62. 簡易DataGridの実装
  63. ボタンの色と説明文
  64. ボタンの色を自由に変える
  65. イベント判定を隠す
  66. ハノイの塔をアニメーションで表示する
  67. 弦の振動(String Vibration)のシミュレーション
  68. 熱拡散方程式(Thermal Diffusion Equation)
  69. 障害物がある流体
  70. 波のシミュレーション
  71. 分子運動のシミュレーション
  72. 伸縮する棒と2つの球
  73. 円柱周りの粘性のある流体
  74. 花火のシミュレーション
  75. 画像表示時のラスターオペレーション
  76. キーボードをピアノの鍵盤がわりに
  77. パーカッションの音を確認する
  78. WAVファイルの生成
  79. 音を作って遊ぼう
  80. 「さくらさくら」演奏
  81. 多重振り子シミュレーション
  82. コンソールアプリでCLIが使えるかを確認してみた
  83. MIDI音源でドラムパターン
  84. 干渉縞(interference fringes)で遊ぼう
  85. C言語で画像処理
  86. 簡便法による3次スプライン曲線
  87. マルチCPUによる表探索のシミュレーション
  88. 音色の合成
  89. MIDIファイル再生
  90. CRC符号の計算
  91. チェックサム符号の計算
  92. 水平垂直パリティ符号の計算
  93. 群計数チェック符号の計算
  94. 伝送路符号4B3Tへの変換
  95. 改良型マージソート(improved Merge Sort)
  96. ビット演算による集合
  97. 畑政義写像
  98. 複素関数マップ
  99. ガンマ関数のグラフを描く
  100. エノン写像を描く
  101. ロジスティック写像の周期倍分岐を描く
  102. ジャパニーズ・アトラクタを描く
  103. ローレンツ・モデルを描く
  104. 「宣教師と人食い人」問題
  105. 積み木問題
  106. FCFSシミュレーション
  107. 多重レベル・フィードバック行列
  108. 仮想マシンのアセンブラとエミュレータ
  109. 誤差拡散ディザリングにおける各種手法の比較
  110. 配列ディザリング(Ordered Dithering)の比較
  111. Bignumber(C言語版)
  112. 旧暦計算
  113. 一次ΣΔADCシミュレーション
  114. 伝達関数による振幅周波数特性
  115. ハフマン符号化(Huffman Coding)
  116. 遺伝的アルゴリズムによる8クィーン問題

【プログラム例】

【注意】
以下,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);



}


  1. 整数関連

  2. 実数関連

  3. 四元数関連

  4. 以下のインクルードファイル(.h)を使うと、
    四元数を演算子の対象にすることができます。
    quater.h

    以下に、このインクルードファイルを使ったソースプログラム例を示します。
    ただし、演算子のオーバロードは裸のC言語の機能ではなく、
    C++の機能ですので、ソースプログラムの拡張子は".cpp"、
    ボーランドC の人は、C++としてコンパイルして下さい。

    演算子のオーバロードを用いた例

  5. ニューロネットワーク逆伝播法による学習

  6. グモウスキーとミラの写像
  7. (2015/12/13 無駄な処理の削除、μ>1のときμ=-1に戻すようにしました)
    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h

    Win32プロジェクトを選んで、
    追加オプションで空のプロジェクトを選択してください。
    新しい項目の追加を選んでインクルードファイルとソースプログラムを、
    コピー&ペーストして下さい。

    タイマーイベントを使っていますので、初心者のために
    超簡単なターマーイベントのプログラム例を示します。
    タイマーイベントの簡単な例

    以下は、パラメータを入力できるように改良したバージョンです。
    【改良版】グモウスキーとミラの写像

    (2015/12/13 μ>1のときμ=-1に戻すようにしました)

    以下は、グモウスキーとミラが提唱した別の写像です。(2017/02/02追加)

    他のグモウスキーとミラの写像【その1】
    他のグモウスキーとミラの写像【その2】

  8. マンデルブロ集合(Mandelbrot set)
  9. 上記5のmyWin.hを使っていますので、
    同様にインクルードファイルとしてコピー&ペーストしてください。

    なお、ビットマップに描画し、それを画面に表示する簡単な例題にもなっています。
    2015/12/31収斂回数も色表示できるよう改良しました。
    なお収斂も発散も検出できなかった場所は黒色で表示しています。

    【配色を変更した版】
    配色の方法を変えてみました。 (2016/01/02 画面を拡大・移動できるように大幅改造しました)

    全体表示方法を変えた例
    マンデルブロ集合 全体 表示例1
    表示例2 表示例3 表示例4

  10. C言語による反復関数系(Iterated Function System)


  11. 上記5のmyWin.hを使っていますので、
    同様にインクルードファイルとしてコピー&ペーストしてください。
    myWin.h

    2017/01/11 シダの葉の反復関数系を改良しました。



  12. マインスウィーパ
  13. 上記5のmyWin.hを使っていますので、
    同様にインクルードファイルとしてコピー&ペーストしてください。
    myWin.h

    なお、マウスイベントを使っていますので、初心者のためにマウスイベントの
    超簡単なマウスイベントプログラム例が以下です。
    マウスイベントの簡単な例
    マウスイベントを確認する

    以下は、右クリックで旗の表示ができるように改良したバージョンです。

    【改良版】C言語によるマインスウィーパ



  14. 逆ポーランド記法への変換と実行
  15. 実行では、四則演算と若干の関数だけを用意していますので、
    トレーニング用として、他の演算子や関数を増やしてみましょう。

    以下は、標準入力から文を入力するバージョンです。
    【標準入力版】逆ポーランド記法への変換と実行


  16. 数字の英語読みを表示する
  17. C言語の unsigned long の範囲内(0 〜 4,294,967,295)で
    英語の読みを表示するプログラムです。

    コンソールアプリケーションとして作成しています。

  18. C言語の注釈を無視する
  19. 言語処理を学ぶ学生さん用に語彙解析(Lexcal Analysis)から
    呼び出せる形の関数として記述してあります。

    関数ポインタのよい使用例となっています。

  20. エスケープ文字列変換
  21. C言語のエスケープ文字列を単一の文字に変換する関数です。
    文字数を返却しますので、トレーニングとして、
    この関数を呼び出して、全体文字列を変換する関数を
    作成してみましょう。

  22. Nバイト長浮動小数点演算
  23. (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 等の替りに使用することができます。

  24. C言語による Space War !
  25. 1978年以降、大ブームになったインベーダゲームの原型、
    PDP-1 の Space War ! を C 言語のコンソールアプリケーションで
    再現してみました。なお、当時の画面の文字は、すべて半角文字ですが、
    攻撃の爆弾を全角文字で表示しています。
    当時と同じように Z で左シフト、X で右シフトにしています。

    昔を偲んで、遊んでみましょう。

    実行するには、以下のインクルードファイルを組込んでください。

    コンソール画面制御(Console.h)

    UNIX開発に貢献したケン・トンプソンが若い頃に熱中したゲームです。

  26. ホスト名から公式名・別名・IPアドレスを得る
  27. 公式名、別名も表示されます。
    以下のライブラリを使っていますので、
    ソースと同じフォルダにコピーしてください。

    ソケット(WS2_32.LIB)入手先

  28. WSAを理解するための小さな小さなサーバ
  29. Windows Socket APIの使用方法を理解するためだけの、
    とにかく小さなサーバです。本来ならそれぞれの処理をスレッドに
    分けるべきですが、WSAの理解の邪魔になりますので、
    1クライアントにして、スレッド分解しなくても済むようにしました。

    15と同様、WS_32.LIBを使っていますので、
    ソースと同じフォルダにコピーしてください。

  30. 小さなチャット・サーバ
  31. クライアントを用意するにあたって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++」「コード生成」を選択し、
    「基本ランタイムチェック」を「既定」に変更したのち、

    再コンパイルして実行してください。

  32. 小さなチャット用クライアント
  33. 上記17に対応するクライアント側プログラムです。

    上記17と同様エラーハンドリング処理を若干サボっていますが
    全体を見やすくするためですので、ご勘弁下さい。

    15と同様、WS_32.LIBを使っていますので、
    ソースと同じフォルダにコピーしてください。

    実行時のRun-Time Check Failure #2 ・・・
    に対する対処は上記17と同じです。

    最初ホスト名を聞いてきますので、
    localhostまたはIPアドレスを入力して下さい。
    Your Name? に答えて、チャット開始です。

  34. チャット用クライアントWindows版
  35. 上記18のWindows版です。デザインは凝っていませんが、
    自分でカッコいい画面を作ってみるのもよいかと思います。

    15と同様、WS_32.LIBを使っていますので、
    ソースと同じフォルダにコピーしてください。

    実行時のRun-Time Check Failure #2 ・・・
    に対する対処は上記17と同じです。

    以下のファイルを「myWin.h」という名前で
    インクルードファイルとして追加してください。
    19. myWin.h


  36. カレンダー表示
  37. nbsp;年月を入力するとカレンダーを表示するプログラムです。
    演習用に作りましたので、各関数の確認用関数も用意しています。

  38. 収束が非常に速いパイ(π)の計算
  39. 収束が非常に速い(4〜5回程度)πの計算プログラムです。

  40. 除算を使用しない逆数計算
  41. 除算が乗算に比べて非常に遅い計算機のための逆数計算です。

  42. 8王妃(eight qeen)問題
  43. N×Nの正方形のチェス盤の升目にどのクイーンも
    同じ行,同じ列,斜めにならないよう置く問題です。

  44. 石取りゲーム
  45. 石の山から交互に石を取り、最後に石を取ったのが負け。
    パスはできません。

  46. 離散的フーリエ変換(DFT)
  47. 結果例はDドライブのトップに生成するようにしていますので
    自分の環境に合わせてファイル指示名を変更してください。

    フーリエ変換の機能だけを使いたい場合,
    以下のインクルードファイルが便利です。

    フーリエ変換のインクルードファイル(Fourier.h)
    Fourier.hを使ったプログラム例(Fourier_console.c)

  48. 非再帰マージソフト
  49. 通常のマージソフトは再帰的呼び出しで定義されますが、
    再帰的呼び出しの部分を省略し、繰り返しで表現する方法です。

  50. クイックソート
  51. C.A.Hoare先生が考案したクイックソートのプログラム例です。

  52. DKA法による高次代数方程式の解法
  53. ニュートン法をデュラン、ケルナーが修正した方法。初期値をアッバースの方法で求めます。

    以下は,複素数演算で演算子を使えるようにした定義です。
    ただし,演算子定義はC++の機能ですので,
    これを使うときはC++としてコンパイルしてください。
    以下をインクルードファイルとしてコピー&ペーストしてください。

    Complex.h

    上記インクルードファイルを使ったDKA法のプログラムです。
    演算子を使った表現ですので見やすくなっています。

    演算子を用いた表現

    上記インクルードファイルを使ったフーリエ変換関連プログラムです。
    拙著Kindle版「複素数とフーリエ変換」のサンプルプログラムです。

    複素数とフーリエ変換

  54. 文字列照合における力任せ法,KMP法,BM法の比較
  55. 文字列照合問題での3種類の手法を比較します。

  56. WindowsでBitmapブラシを使う
  57. WindowsでBitmapブラシを使って塗りぶすプログラム例を示します。
    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h

  58. コッホ曲線(Koch Curve)
  59. Windowsで線画を描く最も単純な例にもなっています。
    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h

    拡張コッホ曲線です。 拡張コッホ曲線(Koch Curve)



  60. ヒルベルト曲線(Hilbert Curve)
  61. Windowsで線画を描く単純な例です。
    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h



  62. シェルピンスキ曲線(Sierpinski Curve)
  63. Windowsで線画を描く単純な例です。
    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h



  64. 迷路作成
  65. 乱数発生させて、
    迷路を作成するコンソールアプリケーションです。



    【Windows版】迷路作成
    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h



  66. 迷路の3D表示
  67. 迷路の中にいるような雰囲気にするために
    立体的にしてみました。



    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h

  68. 平面充填問題

    平面充填問題のC言語による表現例です。

    C#による表現例もご参照頂ければ幸いです。



    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h

  69. メンガーのスポンジを描く

    C言語を用いてWindows APIでメンガーのスポンジを描く例です。



    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h

  70. 平面セルオートマトン

    変化する画像をお楽しみ下さい。



    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h

    以下はセル数を200に拡張したバージョンです。

    【セル数200に】



  71. N巴の食物連鎖(food chain of N cycles)

    変化する画像をお楽しみ下さい。

    黄色い生物は回りに赤い生物がいるとそれを食べてそこに黄色い生物が生まれ
    赤い生物は回りに青い生物がいるとそれを食べてそこに赤い生物が生まれ、
    …(省略)…
    黒い生物は回りに黄色い生物がいるとそれを食べてそこに黒い生物が生まれ、
    というモデル化でシミュレーションします。
    最初は乱数を発生して初期値を設定していますので、
    メチャメチャになっていますが、
    次第に、生物の群落が形成されていきます。
    一定規模の群落が形成されると群落が移動します。

    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h

    以下は、Rectangleの替わりにSetPixelを使って高速化した例です。
    絵は半分の大きさになります。

    Rectangleの替わりにSetPixelを使った例

    プログラミングは苦手だが、動画は楽しみたい方は以下を解凍して実行してみてください。

    【実行形式のダウンロードへ】⇒

    @右クリックで動きが止まります。止まった状態で右クリックすると再度動き始めます。
    A止まった状態で左クリックすると1回だけ実行します。
    B左クリックしながら、画面キャプチャすると動画作成用の画像を保存できます。

    群落の形成定常状態

    プログラム中のEP(敵に食べられる確率)を1にすると
    以下のように幾何学模様に近くなります。

    群落の形成定常状態

    生物1に限って個体数変化をグラフ化してみました。
    【個体数変化のグラフ表示】

    個体数変化の様子が一定でないことが分かります。



  72. 複素数で描く

    |Z2+C|の値の剰余で絵を描きます。ただしCの値を変化させます。
    変化する画像をお楽しみ下さい。



    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h

  73. 歪んだ市松模様

    ちょっと変な気分になる歪んだ市松模様を描いてみました。
    細い部分が薄くなっているように見えてしまいます。

    歪んだ市松模様(その2)

    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h

    こんな市松模様はいかがでしょう。

    【フラクタルな市松模様】
    【その1】 【その2】


    市松模様をスライドさせてみます。左クリックで左移動、右クリックで右移動です。

    【市松模様をスライドさせる】

    いわゆる「市松模様の錯覚」を観察することができます。



    市松模様を錯覚で立体に見せるためのペーパクラフト用の画像を表示します。

    【市松模様・錯覚の立方体】

    【市松模様・錯覚の立方体カラー版】

    作り方

    完成したもの(横から)完成したもの(正面から)片眼で視点を動かして見る


  74. 充填ジュリア集合

    充填ジュリア集合を描く例です。

    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h

    実数部 0.3 虚数部 0.2実数部 -1.004 虚数部 -0.2512 拡大しても似たような絵が繰り返す

  75. 仮想的な地形生成

    平面を4分割させながら、分割点を乱数で揺らぎを与えると地形図みたいな色マップになります。
    仮想的な地形データとして使えます。「中点変位法」というそうです。

    以下のインクルードファイル(.h)を使っていますのでインクルードファイルを組み込んでください。
    myWin.h

    上記を、より単純にしてみました。これでも十分使えそうです。

    【より単純な地形生成】

    生成した地形に関数系を付加

  76. 陰線消去

    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角形で描く右がぼかし機能を入れた表示
    ランダムな地形を陰線消去で描く傾斜で明るさを変える 振り子のポテンシャルエネルギー

  77. キー入力の確認

    プログラムではVK_SHIFTだけを確認しているが、以下のキーも確認してみよう。

    VK_CONTROL, VK_MENU(Altキー用), VK_LSHIFT, VK_RSHIFT,
    VK_LCONTROL, VK_RCONTROL, VK_LMENU, VK_RMENU
    以下のインクルードファイル(.h)を使っていますのでインクルードファイルを組み込んでください。
    myWin.h

  78. 立体の座標変換

    C#と同様、立体の座標変換の例を示します。



    以下の2つのインクルードファイル(.h)を使っていますので
    インクルードファイルを組み込んでください。

    myWin.h 
    my3Dmat.h

  79. 立体描画(Ray Tracing method)

    C#と同様、レイトレーシング法による立体描画のプログラム例を示します。

    単体の球球と床映込みのある球
    映込みなし映込みあり映込みあり

    以下の2つのインクルードファイル(.h)を使っていますので
    インクルードファイルを組み込んでください。

    myWin.h 
    my3Dmat.h

    なお、2016/01/11、my3Dmat.hに立体モデル定義を追加しました。

  80. 図形演算

    C#と同様、図形演算のプログラム例を示します。

    和(A ∪ B)積(A ∩ B)差(A − B)

    以下の2つのインクルードファイル(.h)を使っていますので
    インクルードファイルを組み込んでください。

    myWin.h 
    my3Dmat.h

    なお、2016/01/11、my3Dmat.hに立体モデル定義を追加しました。

    【手法の概要】

    以下の表のように演算相手の内部/外部を判定して表面を描画する。
    演算の種類表記描く部分(Aの表面)描く部分(Bの表面)
    和 (合体)A ∪ BBの外部(!in(B))Aの外部(!in(A))
    積 (共通)A ∩ BBの内部( in(B))Aの内部( in(A))
    差(カット)A − BBの外部(!in(B))Aの内部( in(A))

    描く部分がA, B 共に存在する場合、視点に近いほうを描く。

  81. 透明な物体の描画

    透明な物体の描画プログラム例例を示します。

    屈折率が1より大きい場合屈折率=1のとき屈折率が1より小さい場合

    以下の2つのインクルードファイル(.h)を使っていますので
    インクルードファイルを組み込んでください。

    myWin.h 
    mySmodel.h (立体モデル定義)

  82. ソリッドテクスチャリング(Solid Texturing)

    立体に模様付けする方法で最も簡単な「ソリッドテクスチャリング」のプログラム例を示します。

    テクスチャ画像模様付けした球体

    以下のbmpファイル, リソースファイル(.rc),
    2つのインクルードファイル(.h)を使っていますので
    それぞれ組み込んでください。

    bmpファイル(woodtx.bmp)
    リソースファイル(woodtx.rc)
    myWin.h 
    mySmodel.h (立体モデル定義)

    画像をファイルから読み込む場合、以下のプログラムが参考になります。
    画像ファイル(JPEG/GIF/BMP)の読込み

  83. テクスチャマッピング(Texture Mapping)

    テクスチャマッピングでサッカーボールを描くプログラム例を示します。
    テクスチャ画像が小さいのでギャザが目立ちますが、
    気に入らない方はもっと大きな画像を用意してチャレンジしてみて下さい。

    テクスチャ画像模様付けした球体

    以下のbmpファイル, リソースファイル(.rc),
    2つのインクルードファイル(.h)を使っていますので
    それぞれ組み込んでください。

    bmpファイル(ball.bmp)
    リソースファイル(ball.rc)
    myWin.h 
    mySmodel.h (立体モデル定義)

  84. バンプマッピング(Bump Mapping)

    バンプマッピングでデコボコ感を描くプログラム例を示します。

    マッピング画像バンプマッピングによる球体

    以下のbmpファイル, リソースファイル(.rc),
    2つのインクルードファイル(.h)を使っていますので
    それぞれ組み込んでください。

    bmpファイル(bump.bmp)
    リソースファイル(bump.rc)
    myWin.h 
    myView.h (立体モデル定義および共通関数)

  85. リフレクションマッピング(Reflection Mapping)

    表面が鏡のような素材の球を描くプログラム例を示します。
    プログラム例では、球の周りをマッピング画像で取り囲んでいるものとします。

    マッピング画像球体

    以下のbmpファイル, リソースファイル(.rc),
    2つのインクルードファイル(.h)を使っていますので
    それぞれ組み込んでください。

    bmpファイル(back.bmp)
    リソースファイル(back.rc)
    myWin.h 
    myView.h (立体モデル定義および共通関数)

  86. リフラクションマッピング(Refraction Mapping)

    「リフレクション(reflection : 反射)」と「りフラクション(refraction : 屈折)」は
    日本語的には紛らわしく聞こえますが・・・
    ガラス玉のように屈折率の大きい素材の球を描くプログラム例を示します。
    屈折率は、石英ガラスと同様 1.5 程度にしました。

    なお、プログラム例では、球の周りをマッピング画像で取り囲んでいるものとします。

    以下は、色付き、かつ透明度を指定できるようにしたバージョンです。
    色と透明度を指定するバージョン【リフラクションマッピング】

    マッピング画像球体赤く透明な球体透明度を10%ずつ変化させる
    屈折率を変化させる

    以下のbmpファイル, リソースファイル(.rc),
    2つのインクルードファイル(.h)を使っていますので
    それぞれ組み込んでください。

    bmpファイル(back.bmp)
    リソースファイル(back.rc)
    myWin.h 
    myView.h (立体モデル定義および共通関数)

  87. MIDIで音楽演奏
  88. 左ボタンをクリックすると演奏開始、右ボタンをクリックすると演奏を停止します。
    チャネル番号を変えて音質を変えたり、楽譜データを変更して遊んでみましょう。

  89. MPEG3ファイルの再生
  90. MPEG3再生プログラム例です。
    好きな音楽が入っているMPEG3ファイルを指定してみましょう。

    アプリケーション作りに役立つと思います。

    以下のインクルードファイル(.h)を使っていますので
    組み込んでください。

    myWin.h 
    MPEG3ファイルを再生するといっても,MPEG3ファイルがないと困りますね。
    そこで私が編曲した曲を用意しました。

    ダウンロードするには,右ボタンクリックで
    「対象をファイルに保存」を選択してください。

    1. あわてんぼうの歌
    2. いつくしみ深き
    3. しずけき河の岸辺を(変奏曲)

    ついでに,稚拙かもしれませんが私が作曲した曲も。

    MIDIで作ったものをMP3に変換したものです。
    1. 話したいのに
    2. 疲れるだけさ
    3. わかってくれよ
    4. 可愛い人

  91. AVIファイルの再生
  92. AVIファイル再生プログラム例です。
    アプリケーション作りに役立つと思います。

    なお、このプログラムは、AVIデバイスハンドラが組み込まれていないと動作しません。
    以下のインクルードファイル(.h)を使っていますので
    組み込んでください。

    myWin.h 

  93. WAVファイルの再生
  94. WAVファイル再生プログラム例です。
    アプリケーション作りに役立つと思います。

    以下のインクルードファイル(.h)を使っていますので
    組み込んでください。

    myWin.h 

  95. BMPファイルの出力
  96. クリップボードの画像をBMPファイルとして出力しますので、
    最初、画面右上付近の「prt sc」キーを押してから実行します。

    左ボタンをクリックするとファイル保存ダイアログボックスが表示されますので、
    保存ファイル名を指定します。

    プログラムで生成した画像をファイル出力する際の参考になると思います。
    BMPファイルの構造を勉強するための例にもなると思います。

    以下のインクルードファイル(.h)を使っていますので
    組み込んでください。

    myWin.h 

    なお、以下は画像ファイルを入力して表示するプログラムです。
    画像ファイル(JPEG/GIF/BMP)の読込み

    GDI+を使えば、もっと色々な形式の画像ファイルを入力して表示できます。
    GDI+を使って

    (2016/03/19 ファイル・表示メニューおよび拡大・縮小機能を追加しました)

    GDI+の入手先は以下のとおりです。古いバージョンで確認用でも良ければ【ここで】
    【GDI+入手先】以下から頒布用のGDIが入手できます。
    Platform SDK Redistributable: GDI+

  97. 任意の四角形内に画像を描く

    Windows APIのスクラッチモードで縮小すると画像が汚くなること、
    回転等の処理ができない等の理由で、C#等にある機能を自作してみました。



    以下のbmpファイル, リソースファイル(.rc),
    2つのインクルードファイル(.h)を使っていますので
    それぞれ組み込んでください。

    bmpファイル(suzume.bmp)
    リソースファイル(suzume.rc)
    myWin.h 

    なお、ファイルから入力してスクラッチモードで表示、
    かつスタティックコントロールに表示する参考例を以下に示します。

    画像ファイル入力・表示

    表示例


  98. ナンプレパズルの自動生成とゲームもどき

    ナンプレパズルを自動生成する例です。
    なお、簡単化のためにゲーム部分は数字を指定した時点で正解かどうかを表示しますが、
    ナンプレパズルの醍醐味は最後までやらないと正解かどうかが分からないということ。
    この辺の工夫は皆様にお任せします。ということで「ゲームもどき」と題しました。

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 



    以下のバージョンは、数字を見せる場所を指定する方法です。
    【数字を見せる場所を指定する】

    ただし、複数解がある場合ランダムにマス目を増やします。
    したがって、指定された場所以外も見せる場所になることもあります。



  99. 簡易DataGridの実装

    スクロールバーや行/列の挿入・削除、番号の付け替え等のプログラム例にしました(2016/02/07)。

    1. セルのデータをどう扱うかはユーザの勝手。したがってセルのデータ型はすべて文字列。
    2. なお、入力はエディットウィンドウに任せています。
    3. すべてソースプログラムでどう扱っているかわかっているので安心です。



    以下のインクルードファイル(.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を使った例】

  100. ボタンの色と説明文

    ちょっとくだらないかもしれませんが、マウスがボタンの上を通り過ぎるとき、
    ボタンの文字色を変え、説明文を表示するプログラム例です。
    ユーザの気をひくとき使えるかも…。

    ボタンの上にないときボタンの上にあるとき
    クリックしたときエディットボックスの色を変える


    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 

    リソースファイルを指定してカスタムダイアログボックスでやれば簡単なのですが、
    標準コントロールの色を変更するには、WM_CTLCOLORSTATIC、WM_CTLCOLOREDIT等の
    メッセージ処理で文字色や背景色を変更するしかない。面倒ですが…
    以下はエディットボックスの背景・文字色を変えてみた例です。

    【エディットボックスの背景と文字色を変える】

    ボタンの表示方法を変えてみました。こちらのほうが目立つかも? 【上記のボタンの表示方法の変更】



  101. ボタンの色を自由に変える

    上記「63.ボタンの色と説明文」の方法では、起動直後のボタンの色を変更することはできません。
    そこで、古臭い方法ですが、こんなプログラムを作ってみました。
    ユーザの気をひくとき使えるかも…。

    マウスを移動するとボタンを選択したらユーザ指定の関数が実行される


    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myButton.h

    myWin.h 



  102. イベント判定を隠す

    イベントの判定部分はWindows上の約束事。約束事に縛られた部分が見えるのは煩わしいもの。
    そこで、イベント判定部分を隠すインクルードファイルを作ってみました。
    例題プログラムはかなりすっきり見えるかと思います…。
    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    hideEvent.h
    myWin.h 

    ウィンドウのメニューハンドラを番号自動生成し、コマンド判別も隠してみました。

    例題プログラムhideEvent.h
    EVCM.h
    myWin.h 



  103. ハノイの塔をアニメーションで表示する

    再帰的アルゴリズムの最初に説明されるのがこの「ハノイの塔」。
    これをアニメーションで表示するようにしてみました。
    円盤の描画は、若干凝っています。

    円盤の数は10枚までを確認しています。
    それ以上のときは配列サイズを大きくしてチャレンジしてください。

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 

    以下は、表示部分とハノイの等の解を求める部分をマルチスレッド化することで
    履歴を保存するための配列をなくした例です。
    マルチスレッドにおけるランデブー制御の例題ともなっています。

    マルチスレッド版「ハノイの塔」

    以下は、表示用スレッドを生成せず(ハノイの等の解を求める部分のみ子スレッド化)
    親スレッドのタイマー処理で表示するようにした例です。
    こちらの方が単純です。

    改良マルチスレッド版「ハノイの塔」



  104. 弦の振動(String Vibration)のシミュレーション

    弦の振動のシミュレーションプログラム例です。
    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 



  105. 熱拡散方程式(Thermal Diffusion Equation)

    熱拡散方程式プログラム例です。
    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 



  106. 障害物がある流体

    障害物がある流体の解析プログラム例です。
    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 



  107. 波のシミュレーション

    二次元波動方程式により波のシミュレーションを行うプログラム例です。
    実行が遅いですが、numX、numYを小さくして動かすこともできます。
    (2016/02/16 バグ修正、および表示方法変更による高速化を行いました)

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 



  108. 分子運動のシミュレーション

    レナールドジョンズ(Lennard-Jones)ポテンシャルによる
    分子動力学的なシミュレーションを行うプログラム例です。

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 



  109. 伸縮する棒と2つの球

    バネのように伸縮する棒と2つの球の組合せです。
    (バネは一定程度短くなると、それ以上縮みませんが、このシミュレーションでは考慮していません)

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 



  110. 円柱周りの粘性のある流体

    円柱周りを流れる流体のシミュレーションプログラム例です。
    手順的にはフラクショナルステップ法、近似解法としては3次精度まで考慮、
    差分法としては上流差分法(いわゆる風上差分)を用いています。

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 



  111. 花火のシミュレーション

    花火のシミュレーションプログラム例です。
    パラメータ、爆発タイミング等を変更して色々な花火をシミュレーションしましょう。

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 



    手持ち花火のシミュレーションはいかがでしょう。
    なお、火の粉の先頭の円を大きく描いたり、星形にするバージョンも併せて示します。
    どれが花火っぽいでしょうか?

    手持ち花火のシミュレーション
    火の粉の先頭の円を大きく描く

    火の粉の先頭を星形に

    手持ち花火火の粉の先頭を大きく火の粉の先頭を星形に




  112. 画像表示時のラスターオペレーション

    画像表示時のラスターオペレーション使用例です。
    図形を変更したり、使用例にないオペレーション等を試してみましょう。

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 





  113. キーボードをピアノの鍵盤がわりに

    パソコンのキーボードをピアノの鍵盤がわりにして音(MIDI音源)を出す例です。
    キーボードでは一緒に押せないキーがあるので、マウスクリックでも音を出せるようにしました。

    パソコンのキーボードは音楽用ではないので、結構操作が大変ですが、
    左手で和音を、メロディをマウスでとやると簡単な音楽は弾けます。

    2016/02/27 音色調査用として使えるように左右カーソルで音色変更、
    上下カーソルで音の強さを変化させるようにしました。

    音色のコードについては以下が参考になります。

    General MIDI(Wikipedia)

    その他、プログラム構成、画面デザインを整理しました。

    以下は、楽器をリストボックスで選択できるようにしたバージョンです。

    楽器を選択して音色の確認

    プログラミングはおっくうだが、ツールとして使い人のために実行形式のダウンロード。

    楽器を選択して音色の確認[実行形式]

    低い音 ド#レ# ファファ#ソ#ラ# (ド)(ド#)
    対応キーZSXDC VGBHN JM,L
    高い音 ファファ#ソ#ラ# (ド)(ド#)
    対応キーQ2W3E R5T6Y 7UI9

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 



    楽器を選択して音色を確認するバージョンの表示例です。



    整数値からMIDIファイルのデルタタイム等に使われる可変長数値への変換を作ってみました。
    コンソールアプリケーションです。

    【参考:可変長数値への変換】





  114. パーカッションの音を確認する

    MIDIのドラムマップの打楽器の名前からだけでは、音をイメージするのは困難です。
    そこで、こんなプログラムを作ってみました。
    ボタンをクリックするだけで音を確認できます。

    実行形式

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 






  115. WAVファイルの生成

    (1016/03/01 WAV再生部分を組み込みました)
    例題では1秒間だけのバッファを用意し、波のデータを設定する例を示します。
    色々な波形を指定してみましょう。
    なお、本プログラムは単純化するためコンソールアプリケーションとして作成してあります。

    生成されたWAVファイル例

    波形の生成例として、日本語の母音を生成してみました。

    日本語の母音
    (1016/03/01 WAV再生部分を組み込みました)

    (1016/03/03 立上がり部分を滑らかにしました。この方がより自然かも)

    生成されたWAVファイル例

    日本語の母音に音階を付けてみました。

    音階が付いた日本語の母音
    生成された音

    かなりいい加減ですが、適当ですが子音Pもどきを作ってみました。
    ずいぶんサボってますが「パピプペポ」に聞こえます。
    ちゃんと子音を生成するには、音声合成関連の文献等を参照してください。
    これは、あくまで「もどき」です。

    子音Pもどき
    生成されたWAVファイル例

    同様に、かなりいい加減ですが、適当ですが子音Mもどきを作ってみました。
    ずいぶんサボってますが「まみむめも」に聞こえますか?
    自然な音声を出せる素材接続法が主流ですが、子音の奥深さを理解していただくために
    HMM合成法のプログラム例を示します。
    なお、ちゃんと子音を生成するには、音声合成関連の文献等を参照してください。
    これは、あくまで「もどき」です。

    子音Mもどき
    ぱぴぷペぽどき



  116. 音を作って遊ぼう

    (2016/03/02「白色雑音」, 「周波数指定雑音」を追加しました)
    周波数とその構成、エンベローブパターンを指定して色々な音を作りましょう。
    「78.WAVファイルの生成」のWindows版として作成しました。
    周波数や構成パターンを変えて色んな音を作りましょう。

    実行形式

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 






  117. 「さくらさくら」演奏

    「さくらさくら」をMIDI音源を使って演奏する例を示します。
    MIDI音源のイメージが沸くようにするため音のデータを配列化しました。
    楽器は、フルートと琴にしてありますが、自由に変えましょう。
    楽器のコードについては、76.の「楽器を選択して音色の確認」を参照して下さい。

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 




  118. 多重振り子シミュレーション

    振り子をたくさんつなげて多重振り子を作るのは大変かもしれません。
    そこで、多重振り子のシミュレーションプログラムを作ってみました。

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 






  119. コンソールアプリでCLIが使えるかを確認してみた

    コンソールアプリケーションでC++/CLIが使えるか確認してみました。
    例題は、コンソールアプリケーションでGIFファイルを出力する例です。

    なお、以下の準備を行ってください(これをやらないとコンパイルエラーになります)。

    @コンソールアプリケーションで「空のプロジェクト」を選びます。

    A「プロジェクト(P)」、「…のプロジェクト」(…はプロジェクト名)を指定する。

    Cプロパティページの左側の「構成プロパティ」を選択する。

    D「プロジェクトの既定値」の「共通言語ランタイムサポート」で
     「共通言語ランタイムサポート(/clr)」を選択する。

    E以下のように設定したら「OK」ボタンをクリックする。





  120. MIDI音源でドラムパターン

    MIDI音源を利用してドラムパターンを演奏する例です。
    リズムや打楽器を選んで色々なパターンを作りましょう。

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 




  121. 干渉縞(interference fringes)で遊ぼう

    干渉縞による動く模様を表示します。
    干渉される側のズレを調整して色々な模様にしましょう。

    以下のインクルードファイル(.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画像をミックスした画像格子縞繰り返す




  122. C言語で画像処理

    (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 







  123. 簡便法による3次スプライン曲線

    詳しい式の説明については、拙著「ExcelとVBAによる実用数値解析入門」の
    「5.4 スプライン補間 (6)もうひとつの簡便法」を参照してください。

    固定境界条件{{1,1},{1,1}}固定境界条件{{-1,-1},{-1,-1}}自然境界条件




  124. マルチCPUによる表探索のシミュレーション

    並列実行でも逐次実行と同一結果を保証するためのアルゴリズムです。
    これはツイッターで尾崎隆大様との議論の中で出てきたアルゴリズムが
    正しいかどうかを確認するためにシミュレーションしたものです。



  125. 音色の合成

    音色を合成するコンソールアプリケーションです。
    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    wavFile.h 


    以下はWindow版のソースプログラムです。BR>
    Windows版Cソースプログラム

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 


    なお、実行だけを確認して見たい方は以下をダウンロードし、
    解凍後、フォルダー内のtoneColorGen.exeを実行してください。

    Windows版実行形式





  126. MIDIファイル再生

    MIDIファイルを読み込んで再生するプログラムです。
    機動直後にファイル名を指定します。

    停止するには右ボタンをクリックします。
    別ファイルを読み込むには左右ボタンをクリックします。

    以下のインクルードファイル(.h)を使っていますので組み込んでください。

    myWin.h 

    MIDIファイルを再生するといっても,MIDIファイルがないと困りますね。
    そこで私が編曲した曲を用意しました。

    ダウンロードするには,右ボタンクリックで
    「対象をファイルに保存」を選択してください。

    1. 浜辺の唄
    2. 砂山
    3. たんたんたぬき
    4. 雪の降る街を
    5. ドンパン節
    6. 姉こもさ
    7. 鹿児島小原節変奏曲
    8. (曲名不明)

    ついでに僭越ながら私が稚拙ながら作曲した曲も紹介します。

    1. その1
    2. その2
    3. その3
    4. その4
    5. その5
    6. その6
    7. その7

    【参考】 拡張子とデバイス名対応
    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

  127. CRC符号の計算

    CRC-CCITTの符号を計算するプログラム例です。
    誤り符号の学習に役立つと思います。

    生成多項式は、X16 + X12 + X5 + 1 です。

    CRC計算時の除算は減算ではなく,排他的論理和を使います。
    代数的な除算と違いますので,感覚を掴んでもらうために
    以下のプログラムを作ってみました。

    CRC計算時の除算イメージの確認

    CRCの計算時の除算イメージCRC受信時の除算イメージ



  128. チェックサム符号の計算

    TCP/IPのヘッダでのチェックサム符号を計算するプログラム例です。
    TCP/IPの誤り符号の学習に役立つと思います。




  129. 水平垂直パリティ符号の計算

    水平垂直パリティ符号を計算するプログラム例です。
    通信の誤り符号の学習に役立つと思います。



    BCCのチェックでエラーかどうかを判定するプログラム例です。
    0のときエラーなし,1ビットだけのエラーのとき訂正符号,
    2ビット以上のエラーのとき訂正不能として0xFFを返却します。

    BCCエラー訂正符号の計算





  130. 群計数チェック符号の計算

    群計数チェック符号を計算するプログラム例です。
    通信の誤り符号の学習に役立つと思います。





  131. 伝送路符号4B3Tへの変換

    4B3T符号を計算するプログラム例です。
    参考のためにその他の符号のグラフも表示しています。
    伝送路符号の学習に役立つと思います。

    以下のインクルードファイル(.h)を使っていますので、
    インクルードファイルを組み込んでください。
    myWin.h





  132. 改良型マージソート(improved Merge Sort)

    マージソートの再帰呼び出しを省略するソートのプログラム例です。

  133. ビット演算による集合

    ビット演算で集合演算を実装する例です。
    実行時、次のように入力します。

    1. 集合への追加
    2. add <要素番号> in <変数名> または add <要素番号> into <変数名>
      または add <要素番号> <変数名>

    3. 集合から削除
    4. del <要素番号> from <変数名> または del <要素番号> in <変数名>
      del <要素番号> <変数名>

    5. 集合に入っているかどうかのチェック
    6. check <要素番号> in <変数名> または check <要素番号> <変数名>

    7. 代入
    8. <左辺の変数名> = <式>

    9. <変数名> or <変数名> または <変数名> and <変数名> または <変数名> dif <変数名>
      なお、演算子は以下を示す。
      or : 和集合(Union), and : 積集合(Intersection), dif : 差集合(Difference)

  134. 畑政義写像
  135. 畑政義氏(京都大学)が発案した写像方法でフラクタルを描いてみました。



    上記5のmyWin.hを使っていますので、
    同様にインクルードファイルとしてコピー&ペーストしてください。
    myWin.h

    画像はこちら⇒

    以下は,パラメータを少しずつ変化させて色々なフラクタルを
    アニメーション風に表示する例です。

    アニメ風畑政義写像

    複素数演算で演算子を使えるようにしてみました。
    ただし,演算子定義はC++の機能ですので,
    これを使うときはC++としてコンパイルしてください。
    以下をインクルードファイルとしてコピー&ペーストしてください。

    Complex.h

    上記インクルードファイルを使ったソースプログラムです。
    演算子を使った表現ですので見やすくなっています。

    演算子を用いた表現

    以下は,畑政義写像の第2式の最後の1を一般の複素数にして拡張した例です。
    写像で描かれる画像の幅が広がります。

    拡張畑政義写像





  136. 複素関数マップ
  137. Complex.hを使って複素関数のマップを表示してみました。



    以下のインクルードファイルを使っていますのでコピー&ペーストしてください。

    myWin.h

    Complex.h

  138. ガンマ関数のグラフを描く
  139. ガンマ関数のグラフを表示してみました。



    以下のインクルードファイルを使っていますのでコピー&ペーストしてください。

    myWin.h

  140. エノン写像を描く
  141. エノン写像を表示してみました。



    以下のインクルードファイルを使っていますのでコピー&ペーストしてください。

    myWin.h

  142. ロジスティック写像の周期倍分岐を描く
  143. ロジスティック写像の周期倍分岐を表示してみました。



    以下のインクルードファイルを使っていますのでコピー&ペーストしてください。

    myWin.h

  144. ジャパニーズ・アトラクタを描く
  145. 世界最古のアトラクタ「ジャパニーズ・アトラクタ」を描いてみました。



    以下のインクルードファイルを使っていますのでコピー&ペーストしてください。

    myWin.h

  146. ローレンツ・モデルを描く
  147. ローレンツ・モデルを描きました。



    以下のインクルードファイルを使っていますのでコピー&ペーストしてください。

    myWin.h

  148. 「宣教師と人食い人」問題
  149. 「宣教師と人食い人」問題を解くプログラムです。
    アルゴリズムとしては反復深化(iterataive deeping)を使っています。

    コンソール・アプリケーションです。



  150. 積み木問題
  151. 積み木問題を解くプログラムです。
    アルゴリズムとしては反復深化(iterataive deeping)を使っています。
    ブロック数Nとすると最低手順数を2N-1とし、
    前回動かしたブロックを元に戻す操作を行わないものとして
    試行回数を減らしています。

    以下のインクルードファイルを使っていますのでコピー&ペーストしてください。

    myWin.h



  152. FCFSシミュレーション
  153. CPUスケジューリングのFCSをシミュレーションするプログラムです。
    コンソールアプリケーションです。

  154. 多重レベル・フィードバック行列
  155. 多重レベル・フィードバック行列でCPUスケジューリングのシミュレーションを行います。
    コンソールアプリケーションです。

  156. 仮想マシンのアセンブラとエミュレータ
  157. 仮想的なマシンのアセンブラと,そのエミュレータです。
    逐次実行で1ステップずつ実行して
    レジスタやメモリの内容を確認しながら追うことができますので,
    アセンブラ学習用に使えます。
    新しいCPUができてそのエミュレータを作成するときの
    プログラミングパターンの参考としても使えます。

    以下のインクルードファイルとリソースファイルを使っていますので
    コピー&ペーストしてください。

    myWin.h

    emdiagA.rc

    以下の画像をクリックすると拡大できます。

        

     
  158. 誤差拡散ディザリングにおける各種手法の比較
  159. 誤差拡散ディザリングの各種手法を比較するためのプログラムです。

    実行だけ確認してみたいあるかたは,
    以下の実行形式を解凍してお使いください。

    実行形式の圧縮ファイル

    各種手法を数字で指定することにしていますので,
    自分のアイディアを試してみることもできます。

    私がお勧めする方法も
    "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ビット色)

     
  160. 配列ディザリング(Ordered Dithering)の比較
  161. 配列ディザリングの各種手法を比較するためのプログラムです。

    [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の例】



    以下は,上記ディザリング結果の一部を拡大した画像です。



     
  162. Bignumber(C言語版)
  163. 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

     
  164. 旧暦計算
  165. 旧暦を計算して六曜を求めます。
    コンソールアプリケーションです。

    【実行画面例】



     
  166. 一次ΣΔADCシミュレーション
  167. ΣΔADCのシミュレーションを4ビットで行います。
    コンソールアプリケーションです。

    信号処理の学習の一助になるかと思います。
    なお,8ビット,16ビット等に拡張してみるのも一興かと思います

    以下は二次ΣΔADCシミュレーションのソースプログラムです。

    二次ΣΔADCシミュレーション

    シミュレーションプログラムではCSVファイルを出力しますので,
    Excelでグラフ化しました。

    【実行結果のグラフ例】



     
  168. 伝達関数による振幅周波数特性
  169. 伝達関数の分母・分子の関数を変更するだけで,
    振幅周波数特性の値を表示するプログラムです。

    簡単なコンソールアプリケーションですが,
    以下のC++用のインクルードファイルを用いていますので,
    C++としてコンパイルしてください。
    また,以下をインクルードファイルとしてコピー&ペーストしてください。

    Complex.h



     
  170. ハフマン符号化(Huffman Coding)
  171. ハフマン符号化のアルゴリズムを確認するためのプログラムです。
    簡単なコンソールアプリケーションです。
    学習用に作成しましたが,ファイル入出力を追加して,
    拡張してみるのも一考かと思います。


     
  172. 遺伝的アルゴリズムによる8クィーン問題


  173.