【问题标题】:Calculate distance between two mouse points计算两个鼠标点之间的距离
【发布时间】:2012-12-19 00:31:31
【问题描述】:

我需要计算鼠标在屏幕上点击的两个地方之间的距离。

target(x & Y) & source(X & Y) 在鼠标移动事件(e.X & e.Y)上填充

我有distance = Math.Sqrt(Math.Pow(targetX - sourceX, 2) + Math.Pow(targetY - sourceY, 2));

这给了我一个结果,但老实说,我不确定测量的单位是什么或如何转换它。如何将该结果转换为有意义的结果,例如厘米或英寸?我猜我需要考虑屏幕分辨率?

更新 我真的只是在消磨时间。不是在寻找一个很好的解决方案,只是在寻找可行的东西。它只会持续一两天。

这是MoveMove 事件和调用。应该在之前发布所有内容以便更清楚。

    private void HookManager_MouseMove(object sender, MouseEventArgs e)
    {

        labelMousePosition.Text = string.Format("x={0:0000}; y={1:0000}", e.X, e.Y);
        AddDistance(Convert.ToDouble(e.X), Convert.ToDouble(e.Y));
    }

    private void AddDistance(double targetX, double targetY)
    {
        if (sourceX != 0 && sourceY != 0)
        {
            double distance = Convert.ToDouble(lblDistanceTravelled.Text);
            distance =+ Math.Sqrt(Math.Pow(targetX - sourceX, 2) + Math.Pow(targetY - sourceY, 2));
            lblDistanceTravelled.Text = distance.ToString();
        }
        sourceX = targetX;
        sourceY = targetY;
    }

【问题讨论】:

  • 包括您如何填充“targetX”和“sourceX”会很有帮助(我猜它是像素顺便说一句)
  • 打算使用的距离是多少?计算机屏幕上两点之间的距离永远不会以英寸/厘米为单位,需要大量信息才能计算出来(屏幕 DPI 等)。
  • @Rawrgramming 老实说我在圣诞节前的工作很无聊。项目处于搁置状态。昨晚我的妻子问我是否知道一天内我在屏幕上移动了多少英寸。你可以猜到其余的! :)
  • @EricJ。欣赏链接,但我正在消磨时间,所以想自己做:)

标签: c# math mouse distance


【解决方案1】:

变量 targetX 和 sourceX 最有可能以像素为单位,因此得到的距离将以像素为单位。

为了将其转换为“屏幕上的英寸”,您必须知道屏幕的大小。您可以确定每英寸的像素数并从那里进行转换(尽管这仅提供了您将尺子实际放在屏幕上时所获得的估计值)。要获取每英寸的像素,请参阅

How do I determine the true pixel size of my Monitor in .NET?

从该问题中,您可以获得如下 DPI(但请阅读已接受的答案以了解许多警告)

PointF dpi = PointF.Empty;
using(Graphics g = this.CreateGraphics()){
    dpi.X = g.DpiX;
    dpi.Y = g.DpiY;
}

单位之间的转换如下:

lengthInInches = numberOfPixes / dotsPerInch

这里的“点”和“像素”是同一个意思。我使用的是常用术语。

【讨论】:

    【解决方案2】:

    您可以通过

    获取“当前DPI”
    int currentDPI = 0;  
    using (Graphics g = this.CreateGraphics())  
    {  
        currentDPI = (int)g.DpiX;      
    }
    

    然后你就可以得到

    double distanceInInches = distance/*InPixels*/ / currentDPI;
    

    但是,不能真正依赖系统的 DPI 设置来提供从像素距离到屏幕英寸距离的真正转换。

    【讨论】:

    • 所有很棒的答案,但这是我选择的答案。
    【解决方案3】:
            double dpc = this.CreateGraphics().DpiX / 2.54; //Dots Per Centimeter
    
            //calculate the number of pixels in the line
            double lineLengthInPixels = Math.Sqrt(Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2));
    
            //line length in centimenters
            double lineLengthInCentimeters = dpc / lineLengthInPixels;
    

    【讨论】:

      猜你喜欢
      • 2020-02-12
      • 2010-10-30
      • 2011-04-23
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多