[Research]
[Publications]
[Products]
[Free Softwares]
[Links]
[English]
Free Softwares
-
nkjLib:幾何計算ライブラリ
[特徴]
「演算子記述」を使って、行列演算やベクトル演算のプログラミングができる.
演算子を充実することに力点を置いて開発しました.
演算子によるプログラム記述法に慣れれば,
見通しのよいソースコードでプログラムが記述でき,
開発効率(開発速度)の向上,およびプログラムの信頼性向上につながります.
実際,作者は手術ナビゲーションシステムの開発を効率良く行うために,このライブラ
リを作りました.
皆さんのプログラム開発にもお役に立てていただければ幸いです.
(注:現在公開しているのは基本幾何演算部のみです.)
[
Download from Vector
](開発環境:WindowsXP & VC++6.0.圧縮形式:LZH.)
■お知らせ(お詫びとお礼)■
ライブラリの不具合の件では,ユーザの皆様に大変ご迷惑をおかけ致しました。ディスククラッシュによるソースコード紛失で復旧が遅くなりましたが,善意のご協力もあり,無事復旧することができました。
Vectorのサイトにて公開いたしましたので,最新のものに更新してご使用ください。年末年始も含め,休日の貴重なお時間を使ってライブラリの復旧にご協力いただいた方々に心より感謝いたします。
なお,未公開部分を含めたライブラリの開発において,引き続きご協力いただける方(あるいは組織)を募集しております。
ご協力いただける,あるいはご協力を検討いただける方は,nakajima@image.med.osaka-u.ac.jpまでご連絡いただければ幸甚に存じます。よろしくお願いいたします。
◆使用規定
基本的にフリーです.ドキュメントに書かれた条件に従っている限り,使用に関して
制限はありません.
本ライブラリを使用して製品を開発したり,学術成果を出された場合に,
nkjLib を使用して開発した旨を取扱説明書あるいは
学術成果の文書内に記述していただければうれしいです.
作者は,本ライブラリを使用して起こったいかなる損害に対しても一切責任を負いません.
不具合の報告,改良の提案は,
nakajima@image.med.osaka-u.ac.jp
までお願いします.
◆配布規定
再配布は,nkjLib の全てのパッケージを一切の改変なく含め
たものを配布ください.
追加ライブラリを開発した場合には,その追加パッケージに加え,必ず,追加個所を明記
したドキュメントを添付してください.
◆サンプルプログラム
#簡略化のため,このサンプルソースコード内においてエラー処理はして
いません.(実際は,必要に応じてエラーコードを返すので,処理してください.)
=== 3次元点データとマトリクスデータを読み込み,演算を
してから,結果のマトリクスと3次元点データをセーブする.===
//
// リンクは,nkjLib.lib
//
#include < stdio.h >
#include "nkjLib.h"
void main()
{
// 3次元点をファイルから読み込み,表示
//
nkjPoint3D point;
point.Load("point1.dat");
point.Print("Point 1"); // タイトル付き表示
// マトリクスをファイルから読み込み,表示
//
nkjMatx4x4 matx1;
matx1.Load("matrix1.dat");
matx1.Print("Matrix 1"); // タイトル付き表示
// マトリクスを作って,表示
//
nkjMatx4x4 matx2;
matx2[0][0] = 0.0; matx2[0][1] = 0.0; matx2[0][2] = 1.0; matx2[0][3] = 0.0;
matx2[1][0] = 1.0; matx2[1][1] = 0.0; matx2[1][2] = 0.0; matx2[1][3] = 0.0;
matx2[2][0] = 0.0; matx2[2][1] = 1.0; matx2[2][2] = 0.0; matx2[2][3] = 0.0;
matx2[3][0] = 0.0; matx2[3][1] = 0.0; matx2[3][2] = 0.0; matx2[3][3] = 1.0;
matx2.Print(); // タイトルなし表示
// マトリクス演算,マトリクス−点演算を行い,結果をファイルに保存
//
// !(matrix) : 逆行列
// ~(matrix) : 転置行列
//
// (new matrix) = (matrix1) * (matrix2)
// (new point) = (matrix) * (point)
//
// (new point) = (matrix1) * (matrix2 の逆行列) * (point)
//
nkjMatx4x4 newmatx = matx1 * !matx2;
newmatx.Print("New matrix");
newmatx.Save("output.mtx");
nkjPoint3D newpoint = !matx2 * ~matx1 * matx2 * point;
newpoint.Print("Point");
newpoint.Save("output.dat");
}
===

