Как масштабировать и рисовать сюжет в C # - PullRequest
1 голос
/ 31 октября 2011

Я пытаюсь использовать CSV ниже для рисования графика:

2.364258,3.005366
2.723633,3.009784
3.083008,3.012145
3.442383,3.012705
3.801758,3.010412
4.160156,3.010703
4.518555,3.011985
4.876953,3.012547
5.235352,3.009941
5.592773,3.011252
5.951172,3.010596
6.30957,3.011951
6.667969,3.010613
7.026367,3.008634
7.384766,3.009744
7.743164,3.01062
8.101563,3.00942
8.459961,3.009438
8.818359,3.009478
9.177734,3.010827

То, что я до сих пор делал, это то, что я пытался создать Класс для этого! это часть, когда я пытаюсь нарисовать кривую:

class Plotter
    {
        #region Fields and variables

        private Bitmap plot;
        private Graphics g;

        public string PlotType {get; set;}        

        private int iWidth; //Width of the box
        private int iHeight; //

        private float xMax; //maximum range on X axis
        private float yMax; //maximum range on Y axis

        private PointF[] points;

        #endregion    

        #region Constructors

        /// <summary>
        /// Constructor of class
        /// </summary>
        /// <param name="iWidth">Width of image in pixels</param>
        /// <param name="iHeight">Height of image in pixels</param>
        /// <param name="xMax">Maximum value of the values on X</param>
        /// <param name="yMax">Maximum value of the values on Y</param>
        /// <param name="pairs">Pairs of data in an array of PointF[] this is raw data!!</param>
        public Plotter(int iWidth, int iHeight, float xMax, float yMax, PointF[] points)
        {
            this.iWidth = iWidth;
            this.iHeight = iHeight;
            this.xMax = xMax;
            this.yMax = yMax;

            this.points = points;

            plot = new Bitmap(iWidth, iHeight); 
        }

        public Bitmap DrawPlot()
        {
            Pen blackPen = new Pen(Color.Black, 1);
            g = Graphics.FromImage(plot);

            PointF[] p = new PointF[points.GetLength(0)];

            //Try to scale input data to pixel coordinates
            foreach (PointF point in points)
            {
                int i = 0;

                p[i].X = point.X * iWidth;
                p[1].X = point.Y * iHeight;

            }

            g.DrawCurve(blackPen, p, 0);

            return plot;
        }

В конце я получаю прямую линию! что я думаю, было нарисовано на X {0,0} и Y {0,0} на X {0, 400} и Y {0,0}

Можете ли вы помочь мне исправить ошибки, пожалуйста?

P.S .: http://itools.subhashbose.com/grapher/index.php этот сайт может нарисовать график, который мне нужен, достаточно хорошо из данных CSV, которые у меня есть (если вам нужно проверить).

Спасибо!

Ответы [ 2 ]

3 голосов
/ 31 октября 2011

Кажется, это ваша проблема:

foreach (PointF point in points)
{
  int i = 0;

  p[i].X = point.X * iWidth;
  p[1].X = point.Y * iHeight;
}

i всегда равно нулю, и вы никогда не назначаете Y. «Второе» назначение даже не использует i, а индекс 1.

Быстрое исправление без проверки ошибок:

int i = 0;
foreach (PointF point in points)
{
  p[i].X = point.X * iWidth;
  p[i].Y = point.Y * iHeight;

  i++;
}
1 голос
/ 31 октября 2011

Ваше назначение х оба раза.

   p[i].X = point.X * iWidth;
   p[1].X = point.Y * iHeight;

И, как указывает @LarsTech, вам нужно исправить счетчик

...