我在表单中心绘制了一个_radius = 50
像素的圆圈:
g.FillEllipse(Brushes.Red, this.ClientRectangle.Width / 2 - _radius / 2, this.ClientRectangle.Height / 2 - _radius / 2, _radius, _radius);
现在我想检查用户是否点击了表单。
if (e.Button == MouseButtons.Left)
{
int w = this.ClientRectangle.Width;
int h = this.ClientRectangle.Height;
double distance = Math.Sqrt((w/2 - e.Location.X) ^ 2 + (h/2 - e.Location.Y) ^ 2);
....
if (distance <_radius)
return true;
else
return false;
}
现在我结束了错误的价值观。例如,如果我点击圆的边缘,我有时会得到~10或NaN的距离。我在这里做错了什么?
答案 0 :(得分:3)
^
不是“power-to”运算符it's the bitwise XOR operator,这可能不是您想要的。请改用Math.Pow
或x*x
。return distance < _radius
。试试这个:
Single w = this.ClientRectangle.Width;
Single h = this.ClientRectangle.Height;
Single distanceX = w / 2f - e.Location.X;
Single distanceY = h / 2f - e.Location.Y;
Single distance = Math.Sqrt( distanceX * distanceX + distanceY * distanceY );
return distance < this._radius;
(此代码不会更改有关圆圈位置的任何假设。)