// ある直線に対し、任意の点がどちら側にあるかを判別する式(の一部) 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で判定するとうまくいった。
コメント等は基本的に自由ですが、通りすがりとかななしさんとかの場合、いじっても面白くないので放置する可能性があります。
|
|
最新コメント一覧
最新トラックバック一覧
言及URL
言及ISBN/ASIN
言及JAN/EAN