我想使用imagefrom位图在图片框中绘制曲线(二极管曲线)。我现在遇到了一个问题,我的点数据被保存为Double,保持这种状态非常重要。
例如,我所拥有的情节中的一点是这样的:
电压:-0.175电流:-9.930625E-06
是的,它是双倍的!现在我怎么能有一点要做:
Point[] ptarray = new Point[3];
ptarray[0] = new Point(250, 250);
是否有Point []的替代方法接受双值?我有一个500x500的图片框。有没有办法将这些值转换为仍可以节省成本的有效点?我正在使用微安培(10 ^ -6)和电压!
答案 0 :(得分:15)
好吧,如果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
对象,但当然精度将被截断。
答案 1 :(得分:1)
如果它仅用于存储这些值,则总是Tuple
:
Tuple<double, double>[] Points = new Tuple<double, double>[50];
Points[0] = Tuple.Create<double, double>(5.33, 12.45);
答案 2 :(得分:0)
虽然System.Drawing.Point
结构使用int
值,System.Drawing.PointF
结构使用float
值,但还有System.Windows.Point
结构,它使用{{} 1}}值。因此,如果double
无法满足您的需求,那么这可能是您的最佳选择。
但是,由于结构的名称与基于float
的结构的名称冲突,因此在已经包含int
指令的文件中使用它可能很难:
using System.Drawing
幸运的是,您可以使用别名来解决这个问题:
using System.Drawing;
...
System.Windows.Point coords = new System.Windows.Point(1.5, 3.9);