Рисование математических графиков в Dc

  • Автор темы Neirol
  • Дата начала
N

Neirol

#1
Пытаюсь с помощью DC в MFC нарисовать параболу, как не пробую устанавливать значения - ее не видно совсем.
Дайте пожалуйста пример рисования параболы, если начало координат, скажем 200 и 200.
 
O

Odin_KG

#2
Вы начните с того, что нарисуйте точку, а потом уже и до параболы доберетесь. А еще лучше давайте кусок кода, которым вы рисуете, потому что вряд ли все бросятся вспоминать, что такое парабола (я вот смутно вспоминаю :), но не уверен).
 
N

Neirol

#3
Парабола задается функцией y = x2 или y = ax2 + bx + c.
Сам каркас графика и так рисую нормально.
А вот саму параболу незнаю как правильно нарисовать, даже скорей отпозиционировать.
 
O

Odin_KG

#4
А вот саму параболу незнаю как правильно нарисовать, даже скорей отпозиционировать.
А в чем проблема? Допустим, вам нужно нарисовать параболу от x=-1000 до x=+1000. Создаете цикл где меняете x от -1000 до +1000 с определенным шагом (чем меньше шаг, тем качественнее). По X определяете Y. Имея X и Y можно поставить на экране точку или можно соединять прямой линией предыдущую точку с текущей. Если нужно рисовать с центром в 200,200, то просто перед рисованием прибавляете к X и Y по 200.

Вот прямо тут написал вариантик (естественно, не проверял):

Код:
int cx=200;
int cy=200;
double from=-1000;
double to=1000;
double step=1;

double old_x=from;
doulbe old_y=0;

for (double x=from; x<to; x+=step)
{
double y=x*x;

if (old_x!=from)
{
dc.MoveTo((int)(old_x+cx),(int)(old_y+cy));
dc.LineTo((int)(x+cx),(int)(y+cy));
}
old_x=x;
old_y=y;
}
Проверьте еще, чтобы у вас цвет пера (CPen) не был равен цвету фона графика, а то вы так ничего не увидите.
 
N

Neirol

#5
Вы хоть понимаете какие у вас получатся значения Y?
Я о том и говорю, что они просто огромные.
Если будет даже 100 по X, то игрек получается равен десятью тысячам.

Добавлено: Хотя в принципе все верно. Я понял свою ошибку. Я добавлял координаты центра при рассчитывании икса по игреку.
:ya_lamo:
 
O

Odin_KG

#7
Вы
хоть понимаете какие у вас получатся значения Y?
Я понимаю, что вы не понимаете как масштаб добавить.

double scale=0.001;

dc.MoveTo((int)(old_x*scale+cx),(int)(old_y*scale+cy));
dc.LineTo((int)(x*scale+cx),(int)(y*scale+cy));