領域判定の注意点
http://bal4u.dip.jp/mt/program/2004/12/post-13.htmlについて。
// ある直線に対し、任意の点がどちら側にあるかを判別する式(の一部) int dist( int x1, int y1, int x2, int y2, int xa, int ya ) { return (x2-x1)*(ya-y1)+(y2-y1)*(x1-xa); }
こういう関数を作って、得られた結果を乗算して判定してみたが、どうにも結果がおかしい。
具体的には、ある程度の幅を持った縞模様の形に判定が入れ替わる。
さらに詳細に数値を調べていくと、どうやら、乗算の結果がint型で扱える範囲を超えてしまい、符号の反転が起こっていたようだ。(それで縞模様に)。
なので、こういうのをさらに作る。
// 絶対値を1にした同じ符号の数値を返す。 int sign( int num ) { if ( num == 0 ) return 0; return num > 0 ? 1 : -1; }
※C言語とかC++で、signとかsgnは実装されてない、よね?
これで、数値を小さくしてから、sa*sbで判定するとうまくいった。