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、曲線の基にしたいスケールです...通常、X軸の値が-2と+2の間にある場合、X軸の値が描画されることを意味するのは+2であり、現在のY軸の値はたとえば、それらが -10 micro から +10 u の間の場合に描画されます

このメソッドをできるだけスタンドアロンにしたいので、ピクチャボックスのサイズを変更すると、スケールが正しく更新されます。

これはたとえば、実際の値 (-0.6375, -0.00000993375) の最初のデータ ポイントであり、私のメソッドはそれを (24.515625, 932.899536) に変換します。

通常、ダイオード曲線は次のようになります。

ここに画像の説明を入力

アイデアはありますか?

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