画像処理ソリューション
これを見れば画像処理の入門から基礎~応用まで全てがわかるのを目指して!
   
翻訳(Translate)

プロフィール

Akira

ニックネーム:Akira
東京都の町田事業所に勤務
画像処理ソフトの開発を行っています。リンクフリーです!
詳細プロフィールは こちら
お問い合わせは、こちら↓

【補助HP】
画像処理ソリューションWeb版 【Newブログ】
イメージングソリューション

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

11 | 2008/12 | 01
S M T W T F S
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

趣味のブログ

iPhone萬歳!
iPhoneの情報いろいろ。
ブログ学習帳
ブログ、SEO、アフィリエイト情報など(まだまだこれから)
俺流クラフト日記
ハンドメイド作品の記録(現在、放置中)

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【C++/CLI】フォーム間参照

メインページC++/CLI プログラミング 


下図のように、メインのフォームから設定値を設定するための子ウィンドウ(ダイアログボックス)を
表示し親のウィンドウに値を設定しなおす方法を紹介します。

  フォーム間参照

 フォームを開く

  フォームをモーダルで表示する場合は
ShowDialogメソッドを、
  モードレスで表示する場合はShowメソッドを用います。

  (コード例) Form1.hにて
 #include "Form2.h"
  :
  :
Form2^ frm2 = gcnew Form2;
//Form2の表示、Form2の親(Owner)をForm1(this)に設定
frm2->ShowDialog(this);

  ここでのポイントはForm1からForm2を参照できるようにForm2をfrm2という
  フィールド(メンバ変数)に代入していることと、Form2の親がForm1であることがわかるように
  ShowDialogメソッドでForm1(this)を設定しています。
  こうすることで、自分のフォームの親はどのフォームなのか?を調べる場合はフォームの
  Ownerプロパティを参照することで可能となります。
  ただし、Showメソッドを使った場合は引数でthisを指定することができないので、
  
   frm2->Owner = this;
   frm2->Show();
  
  というようにします。

 別フォームの参照

  別のフォームからテキストボックスなどのオブジェクトを
参照する場合には
  
    frm2->textBox1->Text
  
  などとしたくなるのですが、デフォルトではエラーとなってしまいます。
  そこで別のフォームからオブジェクトを参照できるようにオブジェクトのModifiersプロパティ
  Publicなどに設定すると、別のフォームからオブジェクトを参照できるようになります。

  フォーム間参照


 循環参照(相互参照)

  今回の例のように、Form1からForm2を参照、Form2からForm1を参照するので、
  Form1.hにて
    
#include "Form2.h"
  Form2.hにて
    
#include "Form1.h"
  としたくなるのですが、お互いを参照してグルグル回ってしまうので、ヘッダの宣言の部分を
  *.hファイルではなく、*.cppファイルに持って行きます。

  今回のサンプルの例ではイベント処理の部分も*.cppファイルに持っていって

  (コード例) Form2.cppにて
 
#include "StdAfx.h"
#include "Form2.h"

#include "Form1.h"

using namespace prjForm;

System::Void Form2::Form2_Load(System::Object^  sender, System::EventArgs^  e) {

    Form1^ ParentForm;
    
    if (this->Owner != nullptr){
        //親のフォームクラス
        ParentForm = static_cast<Form1^>(this->Owner);

        this->textBox1->Text = ParentForm->textBox1->Text;
        this->textBox2->Text = ParentForm->textBox2->Text;
        this->textBox3->Text = ParentForm->textBox3->Text;
    }
}


 サンプルプログラム

  このサンプルプログラムはこちら(右ボタン→対象をファイルに保存)でダウンロードができます。
  VisualStudio2005 Express Edition で作成しています。
  


Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

【C++/CLI】Graphicsオブジェクトの作成

メインページC++/CLI プログラミング 

ピクチャボックス上に画像や線、文字などを描画するには、Graphicsオブジェクトを作成する必要があります。
このGraphicsオブジェクトに対して描画を行います。

Graphicsオブジェクトを作成する方法は3つ。
1.Imageオブジェクトから作成(オススメ!)
2.CreateGraphicsメソッドを使う方法(使わないことをオススメ!)
3.PaintイベントのPaintEventArgsから取得する方法

Graphiscオブジェクトを作成したら、画像の描画は
     g->DrawImage(bmp, 0, 0);
線の描画は
     g->DrawLine(Pens::Blue,0, 0, 100, 100);
というような具合で。

 Imageオブジェクトから作成
(コード例)
//PictureBoxと同じ大きさのBitmapクラスを作成する。
Bitmap^ bmpPicBox = gcnew Bitmap(pictureBox1->Width, pictureBox1->Height);
//空のBitmapをPictureBoxのImageに指定する。
pictureBox1->Image = bmpPicBox;
//Graphicsオブジェクトの作成(FromImageを使う)
Graphics^ g = Graphics::FromImage(pictureBox1->Image);

上記コードをフォームのResizeイベントなどで処理を行い、作成したGraphicsオブジェクトを使い回せばよいかと思います。
この手法だと再描画は勝手にやってくれる上に、CreateGraphicsを使うよりも
格段に描画が速くなります。
.NET(GDI+)による描画が遅い!と思っている方は、まずはこの方法をお試し下さい。
(でも個人的には、それでも遅く感じます)

 CreateGraphicsメソッドを使う
(コード例)
//Graphicsオブジェクトの作成(CreateGraphicsを使う)
Graphics^ g = pictureBox1->CreateGraphics();

この手法だと簡単ですが描画がかなり遅くなります。
しかも再描画してくれません...


 PaintイベントのPaintEventArgsから取得する
(コード例)
private: System::Void pictureBox1_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) {
             //PaintEventArgsから取得
             Graphics^ g = e->Graphics;
         }

この方法が一番高速ですが、ちょっと扱いにくい。



ImageオブジェクトからGraphicsオブジェクトを作成する方法とCreateGraphisメソッドを使った方法の処理時間の比較などを「モノクロ画像の上に線などを描画」のページで紹介しています。
もしよろしければご参照下さい。


 
     

Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

擬似逆行列(一般逆行列)

メインページ使える数学

逆行列の計算では行数と列数が等しい正方行列のみ計算が可能でした。
しかし、下記のようにn個の未知数(X1~Xn)に対して、式がm本 (m>n)ある場合、
逆行列を使って解くことができません。

擬似逆行列

上記式を行列であらわすと

擬似逆行列

 擬似逆行列
となり、Aの逆行列が求まれば、Xに関して解く事ができるのですが、Aが正方行列で無い場合は
擬似逆行列一般逆行列ともいう)を用い、擬似逆行列は以下のように定義されます。

擬似逆行列
                         (T は転置行列

すると
擬似逆行列

となりXに関して解くことが可能となります。

以下、エクセルで擬似逆行列を使い、X,Yのデータを二次関数で近似した例を示します。

擬似逆行列
擬似逆行列
擬似逆行列
擬似逆行列

以上のように、擬似逆行列を使って二次関数の係数を求めた場合と、エクセルのグラフの
近似直線を使って求めた二次式と一致することが確認できます。

このエクセルのファイルはこちらです。
エクセルを用いた行列の計算に関しては行列の積、逆行列、転置行列の計算のページも
参照下さい。

 
Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

ガウスの消去法

メインページ使える数学

ガウス(Gauss)の消去法は連立一次方程式を解くのに用いられます。
基本的な方針は、下記のような連立一次方程式

ガウスの消去法

を行列であらわすと、

ガウスの消去法

となりますが、対角成分を全て、左下の成分をになるように、行の入替えや足し算、引き算などを行い、
下記の行列になるように調整します。

ガウスの消去法
                       (?の部分は任意の値で可)

これまでの処理を前進消去といいます。
ここで、最後の行の部分(X3の部分)に着目すると、答えが確定しています。
この値を使って最後から2行目の値を計算すると答えが算出できます。
このように最後の行から順々に計算すると答えが全て計算することができます。
この処理は後退代入といいます。
この前進消去と後退代入の処理を合わせてガウスの消去法といいます。

さらに、前進消去のときに対角成分を1にするときの割り算の計算のときにおいて、
■0(ゼロ)で割ることはできない。
■値を絶対値の小さい値で割ると、値に誤差が含まれる場合、
  計算結果に大きく影響が出てしまう。

という性質を考慮します。

ということで、以下、具体的な計算例を示します。

連立一次方程式

ガウスの消去法

のうち、まず最初に1の項のどれか1つを1にするのですが、割り算の計算で誤差が少なくなるように
1の係数が一番大きい2行目の式を一番上に持ってきます。

ガウスの消去法

次に1行目の式の1の係数がになるように1行目の式全体を1の係数()で割ります。

ガウスの消去法

次に1行目以下の式の1の項が消えるように、2行目-1行目×23行目-1行目を計算します。

ガウスの消去法

ここで、3行目の式の3の項(行列で表現すると対角成分)が消えてしまったので、このままだと
対角成分をにできないので、2行目3行目を入れ替えます。

ガウスの消去法

次に2行目の式の2の係数をにするように、2行目の式全体に3/2を掛けます。

ガウスの消去法

次に2行目以下の2の項が消えるように3行目+2行目 × を計算します。

ガウスの消去法

3行目の式のの係数はすでになので、前進消去はこれで終了です。
この3本の式を行列であらわすと

ガウスの消去法

というように、対角成分が全てがで左下の成分がになったことが分かります。

次に後退代入です。

一番下の行の式はすでに答えが確定(= 3)しているのがわかります。
一番下の答えを用いて、下から2行目の式の答えを計算、
一番下、下から2行目の答えを用いて下から3行目の式の答えを計算していきます。
(今回の例だけ特別に、下から2行目の式の答えが確定してしまっています。)

ガウスの消去法

こうして全ての答えが求まります。

ガウスの消去法

この一連の処理がガウスの消去法です。

このガウスの消去法を用いると、連立方程式を求めたり、最小二乗法の未知数を
求めることができます。
Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

回転行列、拡大縮小行列、平行移動行列(三次元座標の場合)

メインページ使える数学

三次元座標の場合、まず座標軸の定義、回転方向の定義を明確に覚えます。

    三次元座標の定義
 この座標は右手座標系と呼ばれます。
 フレミングの法則のときのように右手で親指、人差し指、中指をそれぞれ
 直交するようにします。
 このとき親指から順に親指X軸人差し指Y軸中指Z軸の方向と
 なります。
 回転方向は電流と磁界の向きと同じように電流軸の向き磁界回転方向
 に相当します。(右ねじの法則と同じです。)
 

  回転行列

三次元の回転行列の前に二次元の回転行列のおさらいです。
二次元の回転行列は以下の通りとなります。
二次元座標の回転

これをベースに三次元座標の場合では、回転する軸の正の方向から
原点の方向を見たときに、X軸、Y軸はそれぞれ何軸に相当するのか?
を考えれば、二次元座標のXやYの変数の置き換えで導き出すことが
できます。
行列変換しない軸に関しては単位行列でそのまま残します。

【X軸周りの回転】
X軸周りの回転

【Y軸周りの回転】
Y軸周りの回転


【Z軸周りの回転】

Z軸周りの回転

  拡大縮小行列

点(x, y, z)を原点に関してX軸方向にS倍、Y軸方向にS
Z軸方向にSZ
する行列は

拡大行列

  平行移動行列

点(x, y, z)をX軸方向にT、Y軸方向にT、Z軸方向にTZだけ移動する
行列は

平行移動

 


三次元の座標変換に関して検索すると座標変換は下記のように

行ベクトル

行ベクトルで表記される場合もあるのですが、変換行列の値が変わるので、
混同しないようご注意下さい。
おそらくDirectX(Direct3D)でしか使われないので、特に必要の無い場合は
覚えない方が無難です。

Loading...
スポンサーリンク

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

逆行列(Gauss-Jordan法)

 2×2行列の逆行列
行列行列の逆行列は
 逆行列
となる。
ただし、ad-bc=0のとき、逆行列は存在しない。


 3×3以上の行列の逆行列
Gauss-Jordan法による解き方の例を以下に示します。
基本的には行列の右側に単位行列を付け足して、行ごとに掛け算、足し算、引き算をして
左側が単位行列になるようにして、最後に右側に残った行列が逆行列となります。
といっても分かりづらいので、具体的な計算例は以下のとおりです。

行列
行列
の右側に単位行列を追加します。
逆行列
1行1列目の要素が1となるように1行目を2で割ります。
逆行列
1列目の要素が(1 0 0)となるように[2行目]-[1行目]
[3行目]-[1行目]×4を計算します。
逆行列
2行2列目の要素が1となるように2行目を2倍します。
逆行列
2列目の要素が(0 1 0)となるように[1行目]-[2行目]×3/2[3行目]+[2行目]を計算します。
逆行列
3行3列目の要素はすでに1なので、3列目の要素が(0 0 1)となるように
[1行目]+[3行目]×2[2行目]-[3行目]×2を計算します。
逆行列
これで、左側が単位行列となり、右側にできた行列が求める逆行列となります。

 逆行列のサンプルプログラム
上記のアルゴリズムをそのままプログラムにすると

///////////////////////////////////////////////////////////////////////////
//
// Gauss-Jordan法による逆行列
//
int MatInverse(
    double *Mat,    //逆行列を求める行列
    double *Inv,      //求めた逆行列
    int n                //逆行列の大きさ n行×n列行列
    ){
    int i, j, k;
    double temp;

    //単位行列で初期化
    for (j = 0; j < n; j++){
        for (i = 0; i < n; i++){
            if (i == j){
                Inv[i + j * n] = 1;
            }else{
                Inv[i + j * n] = 0;
            }
        }
    }

    for (k = 0; k < n; k++){
        //k行k列目の要素を1にする
        temp = Mat[k + k * n];
        if (temp == 0) return -1;    //エラー
        for (i = 0; i < n; i++){
            Mat[i + k * n] /= temp;
            Inv[i + k * n] /= temp;
        }

        for (j = 0; j < n; j++){
            if (j != k){
                temp = Mat[k + j * n] / Mat[k + k * n];
                for (i = 0; i < n; i++){
                    Mat[i + j * n] -= Mat[i + k * n] * temp;
                    Inv[i + j * n] -= Inv[i + k * n] * temp;
                }           
            }
        }
    }
    //正常終了
    return 0;
}

上記の例のように呼び出す側は
    double Mat[9];
    double Inv[9];

    Mat[0] = 2; Mat[1] = 3; Mat[2] = 2;
    Mat[3] = 1; Mat[4] = 2; Mat[5] = 2;
    Mat[6] = 4; Mat[7] = 5; Mat[8] = 3;

    //逆行列を求める
    MatInverse(Mat, Inv, 3);

という感じで。
ただし、Matには関数処理後、単位行列が書き込まれます。


Loading...
スポンサーリンク



現在の閲覧者数: / 合計