2011-03-20 29 views
8

我想绘制一个曲线(二极管曲线)在一个picturebox中使用位图图像。我现在有一个问题,这是我的观点数据保存为双精度,保持精确度非常重要。转换为制作点类型的双值

例如在情节我有一个问题是这样的:

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

是的,这是一个双!现在我怎么能有一个点,例如:

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

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

回答

13

好吧,如果float是足够的精度,那么你可以使用PointF struct

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); 
    } 
} 

平等代码最初从here

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

+0

是的,先生是多么愚蠢的是,didnt检查的PointF! – 2011-03-20 04:07:30

+0

请参阅http://stackoverflow.com/a/5221407/380384以了解结构的正确'GetHashCode()'。 – ja72 2014-09-16 23:10:25

1

如果它只是总有Tuple存储这些值:我

Tuple<double, double>[] Points = new Tuple<double, double>[50]; 
Points[0] = Tuple.Create<double, double>(5.33, 12.45); 
+1

元组不添加任何上下文,并且是通用的方式,并且使代码难以阅读。我会说用它们作为最后的手段。 – vidstige 2011-08-16 07:56:56

相关问题