8

imagefromビットマップを使用してピクチャーボックスに曲線(ダイオード曲線)を描きたい。現在問題があり、ポイントデータがDoubleとして保存されているため、歳差運動を維持することが非常に重要です。

たとえば、私が持っているプロットのポイントは次のようになります。

電圧:-0.175電流:-9.930625E-06

はい、ダブルです!たとえば、どうすればよいのでしょうか。

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

double値を受け入れるPoint[]に代わるものはありますか?500x500の画像ボックスがあります。それらの値を歳差運動を保存できる有効なポイントに変換する方法はありますか?私はマイクロアンペア(10 ^ -6)と電圧で動いています!

4

3 に答える 3

15

まあ、float十分な精度であれば、PointF構造体を使用できます:

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 に答える