// 点がポリゴン内にあるかチェック(外積版)
bool checkPointInPolygon(D3DXVECTOR3 &point, D3DXVECTOR3 polygon[], int polygonNum)
{
D3DXVECTOR2 v1, v2;
for (int i = 0; i < polygonNum-1; i++) {
// ポリゴンの1辺のベクトル
v1 = D3DXVECTOR2(polygon[i+1].x - polygon[i].x, polygon[i+1].y - polygon[i].y);
// ポリゴンの1辺のベクトル
v2 = D3DXVECTOR2(print.x - polygon[i].x, point.y - polygon[i].y);
if (D3DXVec2CCW(&v1, &v2) < 0) { // D3DXVec2CCW関数は外積のZ成分を返す
return false;
}
}
return true;
}
// 点がポリゴン内にあるかチェック(内積版)
bool checkPointInPolygon(D3DXVECTOR3 &point, D3DXVECTOR3 polygon[], int polygonNum)
{
D3DXVECTOR2 v1, v2;
// ポリゴンの法線を求める
// ?? 不明
bool plus;
if (D3DXVECTOR2(print.x - polygon[0].x, point.y - polygon[0].y) > 0) {
plus = true;
} else {
plus = false;
}
for (int i = 0; i < polygonNum-1; i++) {
// 1辺の法線を求める
v2 = D3DXVECTOR2(print.x - polygon[i].x, point.y - polygon[i].y);
// 1辺の法線と頂点ベクトルの内積が一定
if (plus && D3DXVec2Dot(&v1, &v2) < 0) return false;
if (!plus && D3DXVec2Dot(&v1, &v2) > 0) return false;
}
return true;
}