2015-02-11 3 views
0

Я относительно новичок в C#, и я пытаюсь нарисовать квадратичную кривую с графиком X и Y для масштабирования. Я нарисовал кривую, хотя появляется в верхнем левом углу экрана, который очень мал и едва заметен. Можно ли увеличить линию кривой и выровнять ее по середине, чтобы ее можно было отобразить правильно?Масштабирование на квадратичной кривой линии в C#

protected override void OnPaint(PaintEventArgs e) 
    { 


     float a = 1, b = -3, c = -4; 
     double x1, x2, x3, y1, y2, y3, delta; 
     delta = (b * b) - (4 * a * c); 
     x1 = ((b * (-1)) + Math.Sqrt(delta))/(2 * a); 
     y1 = a * (x1 * x1) + b * (x1) + c; 
     x2 = x1 + 1; 
     y2 = a * (x2 * x2) + b * (x2) + c; 
     x3 = x1 - 3; 
     y3 = a * (x3 * x3) + b * (x3) + c; 
     int cx1 = Convert.ToInt32(x1); 
     int cx2 = Convert.ToInt32(x2); 
     int cx3 = Convert.ToInt32(x3); 
     int cy1 = Convert.ToInt32(y1); 
     int cy2 = Convert.ToInt32(y2); 
     int cy3 = Convert.ToInt32(y3); 

     Graphics g = e.Graphics; 


     Pen aPen = new Pen(Color.Blue, 1); 
     Point point1 = new Point(cx1, cy1); 
     Point point2 = new Point(cx2, cy2); 
     Point point3 = new Point(cx3, cy3); 
     Point[] Points = { point1, point2, point3 }; 
     g.DrawCurve(aPen, Points); 
+0

Было бы лучше, если бы вы могли прикрепить сюда свое изображение? –

ответ

2

Да можно и даже довольно просто как двигаться (Преобразовать) и увеличения (Scale) в Graphics результаты с помощью Graphics.TranslateTransform и Matrix и Graphics.MultiplyTransform :

using System.Drawing.Drawing2D; 
//.. 

int deltaX = 100; 
int deltaY = 100; 
g.TranslateTransform(deltaX, deltaY); 

float factor = 2.5f; 
Matrix m = new Matrix(); 
m.Scale(factor, factor); 

g.MultiplyTransform(m); 

Обратите внимание, что масштабирование работает как объектив и увеличит пиксели. Таким образом, вы можете уменьшаем Pen.Width при масштабировании вверх Graphics ..

Используя один до ..

g.DrawEllipse(Pens.Blue, 11, 11, 55, 55); 

..и два после преобразований ..

g.DrawEllipse(Pens.Red, 11, 11, 55, 55); 
    using (Pen pen = new Pen(Color.Green, 1/factor)) 
     g.DrawEllipse(pen, 11, 11, 44, 44); 

. .these приводит к следующим изображениям:

enter image description here

(Я изменил радиус зеленого круга, чтобы избежать полного наложения ..)

Это зависит от вас, чтобы найти нужные цифры для перемещения и масштабирования; это, вероятно, будет связано с поиском минимальных и максимальных значений для задействованных точек.

1

Я хотел бы предложить, что вы смотрите в Microsoft Chart controls, он имеет много интересных особенностей, о том, как сделать этот вид кривых с возможностью параметрирования их.

Ссылка на более новую версию этого: here

Смежные вопросы