囲み判定ライブラリVer.2
囲み判定ライブラリ Ver.2 では,任意の点が,任意の複数の囲み線によって 囲まれているかどうかを判定するための関数群を提供します.
囲み判定ライブラリを利用するのには,次の二つのファイルが必要です.
本ライブラリは,情報処理振興事業協会の創造的ソフトウェア育成事 「手書きインタフェースの高度化」の一環で開発されたバージョン(1.2) を元に開発されたライブラリです. このライブラリを利用してソフトウェア等を作成した場合は, 情報処理振興事業協会の一部支援の元に東京農工大学中川研究室において 加藤直樹により開発されたライブラリを使用している ことをなんらかの方法で明記願います. 明記できない場合は,使用料を払っていただく場合がありますので, 作成者である加藤直樹までお問合せください.
このライブラリの再配布や商業目的での販売を行う場合,および, このライブラリを組み込んだソフトウェアを商業目的で販売する場合は, 別途契約を必要としますので,管理者である加藤直樹までお問合せください.
別途に権限の譲渡がない限り,本ライブラリを逆アセンブルなどのリバースエンジニアリングにかけることを禁止します. Microsoft Visual C++ 6.0 のライブラリ形式が利用できない開発環境で利用したいなど, ソースコードなど異なった形式のライブラリ提供が必要な場合は, 作成者である加藤直樹までお問合せください.
なお,本ライブラリの使用により被った直接的または間接的ないかなる損害について, ライブラリ作成者は責任を負わないものといたしますので,ご了承ください.
まず,囲み線を格納するための領域を確保します. そのためには関数 Include_Hello を呼び出します. 戻り値は IncludeType型 へのポインタです. 以後,このポインタ変数を利用することになります. 戻り値として NULL が戻った場合は,領域確保失敗を意味します. 関数 Include_Hello の使用は次のとおりです.
IncludeType* Include_Hello ( CoordinateType maxy, // 外部座標系の最大y座標 CoordinateType offset, // 外部座標系の最小y座標 unsigned short int scale, // 座標系の圧縮係数 unsigned short int maxbuffersize, // 最大座標格納用バッファ数 unsigned short int maxstacksize // 最大判定用スタックサイズ )
座標圧縮係数は内部座標系における1単位に対応する外部座標系の単位数です. たとえば,scale = 10 とすると,外部座標系における10×10の領域が1単位領域となります. この値を大きくすれば大きくするほど必要な座標格納用バッファが少なくすみます.
最大座標格納用バッファサイズは,座標点を格納するためのバッファのサイズです. このバッファが足りなくなると,後で説明する囲み線設定関数で失敗します.
最大判定用スタックサイズは,判定時に使用するバッファのサイズです. このバッファが足りなくなると,後で説明する囲み判定関数で失敗します. ただし,囲み判定関数 Include_Check2 を利用する場合は, このバッファは必要ありませんので 0 として構いません.
int Include_Set ( IncludeType* include, // 作業用変数へのポインタ unsigned short int num, // 座標点数 POINT* pts // 座標点配列へのポインタ )囲み線は,囲み線を構成する点を POINT型(windows.hで定義されている型)の配列に格納し, その配列へのポインタと点数を渡すことで設定できます. 設定が成功すると 0 が, 失敗すると 1 が戻り値として返されます.
この関数を複数回呼び出すと,複数の囲み線による囲み判定が行えます. 前に設定した囲み線が無効になるわけではないことに注意してください.
int Include_Check ( IncludeType*, include // 作業用変数へのポインタ POINT pt // 判定座標点 ) int Include_Check2 ( IncludeType*, include // 作業用変数へのポインタ POINT pt // 判定座標点 )囲み判定関数には2種類あります.Checkはスキャンエッジ法を用いた判定, Check2は位相判定法を用いた判定を行います. Check2では判定用のスタックを使用しません.
判定する点は,POINT型の変数に格納して渡します. 囲まれている場合は 1 が, 囲まれていない場合は 0 が戻り値として返されます. なお,内部で失敗した場合にも,0 が返されます.
囲み判定が終了したら確保した領域を開放します. 開放用の関数の仕様は次のとおりです.
void Include_Bye ( IncludeType* include // 作業用変数へのポインタ )
Written by Naoki Kato:naoki@cc.tuat.ac.jp