如果一个点在一个矩形,椭圆形或其他物体内,我会找到经典的'Contains'方法。这些对象位于画布中。
我已经尝试过VisualTreeHelper.FindElementsInHostCoordinates,但我找不到方法。
有人帮帮我吗?
提前致谢!
答案 0 :(得分:8)
这对我有用。 *(如果您觉得有用,请投票!)
public bool Contains(Ellipse Ellipse, Point location)
{
Point center = new Point(
Canvas.GetLeft(Ellipse) + (Ellipse.Width / 2),
Canvas.GetTop(Ellipse) + (Ellipse.Height / 2));
double _xRadius = Ellipse.Width / 2;
double _yRadius = Ellipse.Height / 2;
if (_xRadius <= 0.0 || _yRadius <= 0.0)
return false;
/* This is a more general form of the circle equation
*
* X^2/a^2 + Y^2/b^2 <= 1
*/
Point normalized = new Point(location.X - center.X,
location.Y - center.Y);
return ((double)(normalized.X * normalized.X)
/ (_xRadius * _xRadius)) + ((double)(normalized.Y * normalized.Y) / (_yRadius * _yRadius))
<= 1.0;
}
答案 1 :(得分:3)
使用C#并不是那么简单。
首先你需要一个GraphicsPath
。然后初始化它,你想要的形状,椭圆使用方法AddEllipse
。然后使用IsVisible
方法检查您的点是否包含在形状中。您可以使用各种AddLine
方法之一来测试任意形状。
例如
Rectangle myEllipse = new Rectangle(20, 20, 100, 50);
// use the bounding box of your ellipse instead
GraphicsPath myPath = new GraphicsPath();
myPath.AddEllipse(myEllipse);
bool pointWithinEllipse = myPath.IsVisible(40,30);