2次元平面上の点が有向線分の進行方向に対して左右どちら側にあるかを調べる関数を作る。 //********************************************************* // 点 p が有向線分 e(a,b) の左右どちら側にあるか調べる。 // 点 p が有向線分 e の 左側にある場合 1 を、 // 有向線分 e の直線上にある場合 0 を、 // 有向線分 e の 右側にある場合 -1 を返す。 //********************************************************* int side( POINT_t *p, LINE_t *e ) { POINT_t p1 = *p; POINT_t p2 = e->a; // 有向線分 e の始点 POINT_t p3 = e->b; // 有向線分 e の終点 // 有向線分 (p2,p1), (p2,p3) の外積の z 成分を求める const int n = p1.x * (p2.y - p3.y) + p2.x * (p3.y - p1.y) + p3.x * (p1.y - p2.y); if ( n > 0 ) return 1; // 左 else if ( n < 0 ) return -1; // 右 else return 0; // 線上 }//side 関連 | |