gpt4 book ai didi

wpf - 获取WPF中鼠标位置相对于圆心的角度的最简单方法

转载 作者:行者123 更新时间:2023-12-02 08:46:53 25 4
gpt4 key购买 nike

当mousemove我可以得到e.GetPosition(this)时,我有一个圆圈。但是如何以编程方式获得相对于圆心的角度?

我在互联网上看到了一些在 XAML 中绑定(bind)的示例时钟。这不是我想要的,我想从鼠标位置相对于圆心获取角度值。

这是我尝试过的:

    private void ellipse1_MouseMove(object sender, MouseEventArgs e)
{

Point position = e.GetPosition(this);
double x = position.X;
double y = position.Y;
double angle;
double radians;
radians = Math.Atan2(y, x);
angle = radians * (180 / Math.PI);

}

角度似乎不正确,永远不要得到 0 或 90 180。

最佳答案

好的,MouseEventArgs 公开了函数“GetPosition”,该函数要求提供一个 UI 元素,该元素将为您提供相对鼠标位置。这基本上就是你想要做的。

private void ellipse1_MouseMove(object sender, MouseEventArgs e)
{
// This will get the mouse cursor relative to the upper left corner of your ellipse.
// Note that nothing will happen until you are actually inside of your ellipse.
Point curPoint = e.GetPosition(ellipse1);

// Assuming that your ellipse is actually a circle.
Point center = new Point(ellipse1.Width / 2, ellipse1.Height / 2);

// A bit of math to relate your mouse to the center...
Point relPoint = new Point(curPoint.X - center.X, curPoint.Y - center.Y);

// The fruit of your labor.
Console.WriteLine("({0}:{1})", relPoint.X, relPoint.Y);
}

从您的评论和其他帖子看来,既然您拥有正确的信息,您就可以自己处理实际的角度计算部分。就单位而言,WPF 使用与设备无关的坐标系统。所以半径为 50 的圆不一定是 50 像素。这完全取决于您的系统、屏幕分辨率等。这有点无聊,但如果您真的感兴趣,这将为您解释一些。

http://msdn.microsoft.com/en-us/library/ms748373.aspx

关于wpf - 获取WPF中鼠标位置相对于圆心的角度的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4784139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com