bool LineVsCircle(Vector p1, Vector p2, Vector center, float radius) { Vector lineDir = (p2 - p1); // パドルの方向ベクトル Vector n = new Vector(lineDir.Y, -lineDir.X); // パドルの法専ベクトル n.Normalize(); Vector dir1 = center - p1; Vector dir2 = center - p2; double dist = Math.Abs(DotProduct(dir1, n)); double a1 = DotProduct(dir1, lineDir); double a2 = DotProduct(dir2, lineDir); return((a1 * a2 < 0 && dist < radius) ? true : false); }
bool PaddleHitCircle(Vector p1, Vector p2, Vector center, float radius) { // パドルの方向ベクトル Vector paddleDir = (p2 - p1); // パドルの法線 Vector n = new Vector(paddleDir.Y, -paddleDir.X); n.Normalize(); Vector dir1 = center - p1; Vector dir2 = center - p2; double dist = Math.Abs(DotProduct(dir1, n)); double a1 = DotProduct(dir1, paddleDir); double a2 = DotProduct(dir2, paddleDir); return((a1 * a2 < 0 && dist < radius) ? true : false); }