我必须Circle
从 a 中获取 aList<Circle>
取决于当前MousePosition
这是Circle类
public class Circle
{
public Point Center;
public Circle(int x, int y)
{
this.Center = new Point(x, y);
}
public int Distance(int x, int y)
{
int result = 0;
double part1 = Math.Pow((this.Center.X - x), 2);
double part2 = Math.Pow((this.Center.Y - y), 2);
double underRadical = part1 + part2;
result = (int)Math.Sqrt(underRadical);
return result;
}
public void Draw(Graphics g, Pen pen, int d)
{
g.DrawEllipse(pen, this.Center.X - d / 2, this.Center.Y - d/ 2, d, d );
}
}
这是我从列表中检索圆圈的方式
public class UserControl1 : UserControl
{
private Circle currentCircle;
private List<Circle> circles = new List<Circle>();
private const int RADIUS = 16;
// ...snip
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
currentCircle= this.circles
.Where(c => c.Distance(e.X, e.Y) < RADIUS )
.DefaultIfEmpty(null)
.First();
}
//...snip
}
这适用于小列表,但随着列表的增长,它会变得越来越慢。我想我可以使用 List.BinarySearch 来获得更好的性能,但我不知道如何IComparable
在这种情况下实现。