【问题标题】:A more accurate way to specific a Point/Location on a Windows Form?在 Windows 窗体上指定点/位置的更准确方法?
【发布时间】:2011-07-13 17:55:45
【问题描述】:

我正在尝试围绕表单中心的一个圆圈移动一个图片框。由于舍入问题,我在准确描述图片框应出现的位置时遇到问题。我的数据子集可能反映以下内容:

109.023696905025,151.715396359085
109.041149311463,152.715244054241
109.0586017179,153.715091749398
109.076054124337,154.714939444554
109.093506530774,155.714787139711
109.110958937212,156.714634834867
109.128411343649,157.714482530023
109.145863750086,158.71433022518

控件的Location 字段只接受Point,这会截断我的点小数位,从而在绘制时产生类似六边形的形状。我正在使用以下代码块来创建我的坐标:

 double x1 = pictureBox1.Location.X;
 double y1 = pictureBox1.Location.Y;

 double cx = (double)this.Width / 2;
 double cy = (double)this.Height / 2;
 double radius = Math.Sqrt(Math.Pow(cx - x1, 2) + Math.Pow(cy - y1, 2));

 double arc = Math.Atan((y1 - cy) / (x1 - cx));
 double x = cx + radius * Math.Cos(arc + Math.PI - (Math.PI / 180.0));
 double y = cy + radius * Math.Sin(arc + Math.PI - (Math.PI / 180.0));

鉴于在创建Point 对象时不准确,x 和 y 代表我的点,我怎样才能准确地绘制我的代码生成的点以更准确?

 Console.WriteLine("{0},{1}",x, y);
 pictureBox1.Location = new Point((int)x, (int)y); // Only takes integers, which results in the irregular path.

【问题讨论】:

    标签: c# graphing


    【解决方案1】:

    首先,通过将双精度类型转换为 int,您会自动截断它们的值。像 23.999 这样的数字会自动截断为 23,而实际上它更接近 24。最好舍入到最接近的整数而不是截断。

    其次,屏幕上的像素以离散的步骤出现这一事实是无法避免的。屏幕位置不连续,因此无法真正显示十进制值。但是,您可以通过使用抗锯齿技术更好地逼近十进制值。在这种技术中,您可以绘制两个或多个彼此相邻的具有不同大小的点,这些点表示一个点。例如,我可能会将数字 36.75 绘制为位置 36 处的强像素和位置 35 处的较弱像素。由此产生的效果是一个“点”,似乎位于位置 35 和 36 之间但更接近 36。Google for anti - 别名以获得更多信息。

    【讨论】:

      【解决方案2】:

      您可以尝试使用 PointF,它接受浮点数。

      http://msdn.microsoft.com/en-us/library/system.drawing.pointf.aspx

      【讨论】:

      • 哈哈没有注意到他使用的是 Point 而不是 PointF,我只是假设他的数字超出了 15-16 位的准确度
      • 控件位置没有 PointF 过载。
      【解决方案3】:

      您需要更高精度的库。 C# double type 只有 15-16 位精度。我建议下载W3b.Sine,它将为您提供更高的精度。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-23
        • 2019-10-28
        • 1970-01-01
        • 1970-01-01
        • 2013-10-20
        • 1970-01-01
        • 2015-11-07
        相关资源
        最近更新 更多