8

我想使用 imagefrom bitmap 在图片框中绘制曲线(二极管曲线)。我现在有一个问题,我的点数据被保存为双精度,保持精度非常重要。

例如,我拥有的情节中的一个点是这样的:

电压:-0.175 电流:-9.930625E-06

是的,它是双!现在我该怎么做,例如:

        Point[] ptarray = new Point[3];
        ptarray[0] = new Point(250, 250);

是否有接受双值的 Point[] 的替代方法?我有一个 500x500 的图片框。有没有办法将这些值转换为仍然可以保存进动的有效点?我正在使用微安培 (10^-6) 和电压!

4

3 回答 3

15

好吧,如果float精度足够,那么您可以使用PointFstruct

var point = new PointF(3.5f, 7.9f);

如果你真的需要,你可以定义你自己的PointD结构:

public struct PointD {
    public double X;
    public double Y;

    public PointD(double x, double y) {
        X = x;
        Y = y;
    }

    public Point ToPoint() {
        return new Point((int)X, (int)Y);
    }

    public override bool Equals(object obj) {
      return obj is PointD && this == (PointD)obj;
    }
    public override int GetHashCode() {
      return X.GetHashCode() ^ Y.GetHashCode();
    }
    public static bool operator ==(PointD a, PointD b) {
      return a.X == b.X && a.Y == b.Y;
    }
    public static bool operator !=(PointD a, PointD b) {
      return !(a == b);
    }
}

平等代码最初来自这里

ToPoint()方法允许您将其转换为Point对象,但当然精度会被截断。

于 2011-03-20T03:56:43.970 回答
1

如果只是为了存储这些值,总是有Tuple

Tuple<double, double>[] Points = new Tuple<double, double>[50];
Points[0] = Tuple.Create<double, double>(5.33, 12.45);
于 2011-03-20T04:03:24.520 回答
0

虽然System.Drawing.Point结构使用int值,System.Drawing.PointF结构使用float值,但也有System.Windows.Point结构使用double值。因此,如果float不能满足您的需求,这可能是您的最佳选择。

但是,由于结构的名称与基于 - 的结构的名称冲突int,因此在已经包含using System.Drawing指令的文件中使用它可能会很笨拙:

using System.Drawing;
...
System.Windows.Point coords = new System.Windows.Point(1.5, 3.9);

幸运的是,您可以通过使用别名来解决此问题:

using System.Drawing;
using PointD = System.Windows.Point;
...
PointD coords = new PointD(1.5, 3.9);
于 2018-04-13T19:05:49.663 回答