2011-03-20 20 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

相關問題