Advertisement
Guest User

Untitled

a guest
Aug 2nd, 2010
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.60 KB | None | 0 0
  1.         private bool Contains(Circle circle1, Circle circle2, Vector2 point)
  2.         {
  3.             if (circle1.Contains(point) || circle2.Contains(point)) return true;
  4.  
  5.             float centerDistance = Vector2.Distance(circle1.Center, circle2.Center);
  6.  
  7.             float transformedRadius1 = circle1.Radius / centerDistance;
  8.             float transformedRadius2 = circle2.Radius / centerDistance;
  9.  
  10.             float angle = (float)Math.Atan2(circle2.CenterX - circle1.CenterX, circle2.CenterY - circle1.CenterY);
  11.  
  12.             Vector2 transformedPoint = new Vector2(
  13.                 (float)((point.Y - circle1.CenterY) * Math.Sin(angle) + (point.X - circle1.CenterX) * Math.Cos(angle)) / centerDistance,
  14.                 (float)((point.Y - circle1.CenterY) * Math.Sin(angle) - (point.X - circle1.CenterX) * Math.Cos(angle)) / centerDistance);
  15.  
  16.             if (transformedRadius1 == transformedRadius2)
  17.                 return transformedPoint.X >= 0 && transformedPoint.X <= 1 && Math.Abs(transformedPoint.Y) <= transformedRadius1;
  18.  
  19.             float transformedRadiusDelta = transformedRadius1 - transformedRadius2;
  20.             Debug.Assert(transformedRadiusDelta > 0 && transformedRadiusDelta < 1);
  21.             if (transformedPoint.X < transformedRadius1 * transformedRadiusDelta
  22.                 || transformedPoint.X > 1 + transformedRadius2 * transformedRadiusDelta)
  23.                 return false;
  24.  
  25.             return transformedPoint.X * transformedRadiusDelta
  26.                 + Math.Abs(transformedPoint.Y) * Math.Sqrt(1 - transformedRadiusDelta * transformedRadiusDelta) <= transformedRadius1;
  27.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement