3

我的问题更多的是数学!我有一些值表示我想使用 fromImage(Bitmap) 在图片框上绘制的曲线点。我的图片框尺寸为 500x500。我也知道左上角的点为 (0,0),右下角的点为 (500,500)。显然原点应该是(250,250)。现在我想知道如何将自己的值转换为这种格式?

我拥有的样本点如下:

Voltage: -0.175         Current: -9.930625E-06
Voltage: -0.171875      Current: -9.53375E-06
Voltage: -0.16875       Current: -9.136875E-06
Voltage: -0.16875       Current: -8.74E-06
Voltage: -0.165625      Current: -8.343125E-06
Voltage: -0.1625        Current: -7.94625E-06
Voltage: -0.1625        Current: -7.549375E-06
Voltage: -0.159375      Current: -7.152188E-06
Voltage: -0.15625       Current: -6.755312E-06

您会看到 X 轴上应该有电压值,Y 轴上应该有电流值。我知道为了使它们更好一点,我必须将它们乘以更大的数字,也可能乘以逆或其他东西。但我仍然无法弄清楚如何在我的图片框中表示它们。这些点通常从第三象限开始,到第一象限结束。请协助!

只是要补充一点,我的 X 轴最小值和最大值是 -2V 和 +2V,对于 Y 轴,我将有 -10uA 到 +10uA(即 10*10^-6)

编辑

我想做的是有这样的曲线,所以我在 Graphics.DrawCurve 中使用了这些点:

在此处输入图像描述

更新 这是我的代码的样子:

            g.DrawLine(penAxis, 250, 0, 250, 500); // Y AXIS 
        g.DrawLine(penAxis, 0, 250, 500, 250); // X AXIS          

        PointF[] p = new PointF[pinData.GetLength(0)];   //pinData is AboutBoxForm double[,] array

        for (int i = 0; i < pinData.GetLength(0); i++)
        {
            p[i] = new PointF(250 * ((1 + (float)pinData[i, 0]) / 2), 250 * ((1 + (float)pinData[i, 1] )/ 10));  
        }

        Pen pengraph = new Pen(pinColor, 2.0F);
        g.DrawCurve(pengraph, p);

进度更新

好的,现在使用我的曲线下方的代码如下所示:

            g.DrawLine(penAxis, 250, 0, 250, 500); // Y AXIS 
        g.DrawLine(penAxis, 0, 250, 500, 250); // X AXIS          

        PointF[] p = new PointF[pinData.GetLength(0)];   //pinData is AboutBoxForm double[,] array

        for (int i = 0; i < pinData.GetLength(0); i++)
        {
            p[i] = new PointF(250 * (1 - ((float)pinData[i, 1] *100000) / 10), 250 * (1 + (((float)pinData[i, 0]))/ 2));  
        }

        Pen pengraph = new Pen(pinColor, 2.0F);
        g.DrawCurve(pengraph, p);

在此处输入图像描述

我认为现在的问题是扩展它。解决了我必须乘以 10^6 但我用 ^5 做了,没关系!!!谢谢大家。

4

2 回答 2

1

如果要缩放以适应屏幕,请将每个电压和电流值乘以50

你所有的观点都在third quadrant; 您可以在屏幕上选择原点(0, 0)并使您的所有negative x-axis点为正,即翻转y-axis

如果您不想缩放,请保持乘法因子为单位。

于 2011-03-20T12:49:50.940 回答
1

要使用图片框的整个范围,(V,C) = (0, 0)并映射到中心,您可以使用转换:

X = 250 * (1 + Voltage/2)
Y = 250 * (1 - Current/10)

请注意,这将使电流在 Y 轴上向上增加。如果您想要相反,请(1 + Current/10)在第二个转换中使用。

于 2011-03-20T13:22:05.617 回答