2

我有一个PictureBox并且我想通过知道它的数据点(点的 X,Y)来绘制二极管曲线。目前我的图片框大小为 365*468 像素。我正在挠头将数据点转换为像素友好值,以便曲线在图片框上很好地绘制。

到目前为止,我尝试了各种公式,但没有成功!目前我被困在代码中,它至少显示了一点曲线!

    private PointF[] TranslatePoints(PointF[] points)
    {
        var count = points.Count();
        var p = new PointF[count];

        for(var i = 0; i < count; i++)
        {
            p[i].X = DrawingArea.Width * (1 + (points[i].X / _voltageRange));
            p[i].Y = DrawingArea.Height * (1 - (points[i].Y * (float)Math.Pow(_currentRange, -1)));
        }

        return p;
    }

_voltageRange并且_currentRange是我希望曲线基于的比例...通常是+2,如果X轴上的平均值在-2和+2之间,则应该绘制它们,因为Y轴值的电流应该例如,如果它们在 -10 micro 和 +10 u 之间,则绘制

我希望这个方法尽可能独立,所以如果我调整图片框的大小,比例会正确更新。

例如,这是我拥有的实际值的第一个数据点: (-0.6375, -0.00000993375) 并且我的方法将其转换为 (24.515625, 932.899536) 超出大小的 Piturebox。

通常二极管曲线如下所示:

在此处输入图像描述

请问有什么想法吗?

4

2 回答 2

2

我发现问题了!!!在我使用的公式中,我必须将宽度和高度除以 2!像这样:

   p[i].X = (DrawingArea.Width/2F) * (1 + (points[i].X / _voltageRange)); 
   p[i].Y = (DrawingArea.Height/2F) * (1 - (points[i].Y * (float)Math.Pow(_currentRange, -1))); 
于 2012-07-18T12:38:02.670 回答
0

缩放坐标后,您需要将形状向后移动,因为它会更大,但另一侧的起始位置会有所不同,因此在缩放后,您需要将形状拉回原始起始位置。所以你需要定义一个起始位置,它可以是最左边的底点。之后,您可以检查原始坐标和放大坐标的 X/Y 差异,并使用以下值校正其他点,例如:

var leftBottomPointOriginal = LeftBottom(points)
var leftBottomPointScaledUp= LeftBottom(scaledUpPoints)

var xCorrection = leftBottomPointScaledUp.X-leftBottomPointOriginal.X
var yCorrection = leftBottomPointScaledUp.Y-leftBottomPointOriginal.Y


 for(var i = 0; i < count; i++)
        {
            p[i].X = DrawingArea.Width * (1 + (points[i].X / _voltageRange))-xCorrection;
            p[i].Y = DrawingArea.Height * (1 - (points[i].Y * (float)Math.Pow(_currentRange, -1)))-yCorrection;
        }
于 2012-07-18T12:24:42.797 回答