2015-04-01 2 views
0

Я пытаюсь нарисовать график в C#, что-то вроде enter image description hereПопытка рисовать функцию

До сих пор я был в состоянии нарисовать простые линии, используя DrawLine, но это очень ограничивающее его собственного, потому что не только я вынужден предоставить начальную и конечную точки, я также ограничен прямыми линиями.

И как вы можете видеть

enter image description here

У меня есть кривая на самом последнем TRECH выражения (а перевернутой параболы)

Любые намеки о том, как выполнить это в BMP чертежу ?

Я рисую с помощью следующего

using (Graphics g = Graphics.FromImage(bmp)) 
      { //g.DrawLine and others 
} 
+0

Я имею в виду вас sinelaw Ответим: http://stackoverflow.com/questions/ 14371085/plot-a-line-y-2x-7-on-a-graph – renouve

ответ

2

Вы можете использовать аналогичную функцию из класса Graphics DrawCurve. Он берет массив точек в качестве параметра и затем проводит через них. В зависимости от того, насколько точна ваша кривая, вы можете получить начальную точку, конечную точку и точку поворота.

https://msdn.microsoft.com/en-us/library/7ak09y3z%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

+0

Я дам ему попытку, но создав массив точек с этими функциями хм .. Кажется, что это может потребоваться немного возиться – ng80092b

+0

Чтобы добавить к (правильный) ответ: есть также перегрузка, которая позволяет вам контролировать напряжение; очень полезно! - Учитывая значения a, my и двух Tc и Td, где возникла бы проблема создания дюжины точек? – TaW

0

Первый шаг к рисованию функции будет оценить и сохранить его в массив Пункта:

 //Create a Point array to store the function's values 
     Point[] functionValues = new Point[100]; 

     //Calculate the function for every Point in the Point array 
     for (int x = 0; x < functionValues.Length; x++) 
     { 
      //Set the every point's X value to the current iteration of the loop. That means that we are evaluating the function in steps of 1 
      functionValues[x].X = x; 
      //Calculate the Y value of every point. In this exemple I am using the function x^2 
      functionValues[x].Y = x * x; 
     } 

Затем, когда вы рисуете свою функцию, сделать это следующим образом:

 //Iterate through every point in the array 
     for (int i = 1; i < functionValues.Length; i++) 
     { 
      //Draw a line between every point and the one before it 
      //Note that 'g' is your graphics object 
      g.DrawLine(Pens.Black, functionValues[i-1], functionValues[i]); 
     } 

Когда вы рисуете, сделать это в случае Paint форме и убедитесь, что форма двойной буферизации:

Point[] functionValues; 

    public Form1() 
    { 
     InitializeComponent(); 
     this.DoubleBuffered = true; 
     this.Paint += Form1_Paint; //Subscribe to the Paint Event 

     //Create a Point array to store the function's values 
     functionValues = new Point[100]; 

     //Calculate the function for every Point in the Point array 
     for (int x = 0; x < functionValues.Length; x++) 
     { 
      //Set the every point's X value to the current iteration of the loop. That means that we are evaluating the function in steps of 1 
      functionValues[x].X = x; 
      //Calculate the Y value of every point. In this exemple I am using the function x^2 
      functionValues[x].Y = x * x; 
     } 
    } 

    void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     Graphics g = e.Graphics; 
     //Draw using 'g' or 'e.Graphics'. 
     //For exemple: 

     //Iterate through every point in the array 
     for (int i = 1; i < functionValues.Length; i++) 
     { 
      //Draw a line between every point and the one before it 
      g.DrawLine(Pens.Black, functionValues[i - 1], functionValues[i]); 
     } 

    } 

И lastley, чтобы вызвать форму для обновления и перерисовать себя, вызовите метод Invalidate вашей формы:

this.Invalidate(); 
Смежные вопросы