Стоит задача:построить график функции на координатной плоскости при помощи WInApi. С WinApi сталкиваюсь первый раз. Пробовал пока строить без осей координат,лишь бы график появился. Использовал SetPixel ,но не получилось.
Вот код,который пишу в разделе WM_PAINT
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
for (int i =300; i < 400; i++)
{
int y;
y= i * i*i - 10 * i*i - 3 * i + 59;
SetPixel(hdc,i+50,y,RGB(0,100,255));
}
EndPaint(hWnd, &ps);
Выводит 4 точки,надеюсь заметите их.
Что я делаю не так?Может я в корне не правильно подхожу к построению на WinAPi ?
Тут явно отсутствует проверка на то, что получившиеся координаты x
y
остаются в пределах окна. Первое же значение y
при i
= 300 будет 26099159
. Соответственно тут надо делать масштабирование чтоб они влезали в нужный диапазон.
Я начинающий, поэтому могу ошибаться. В y записывается нормализированное значение от 0 до 1. В данном случае используется отсчет от верхнего левого края окна и ось y направлена вниз. В функции SetPixel +200 отвечает за смещение начала графика вниз(при 0 график будет начинаться на верхней границе окна и в данном случае расти вверх, т.е. его не будет видно). Умножение на -1 делает график растущим вверх. 500 это коэффициент, который я подобрал эмпирическим путем.
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
for(int i = 300; i <= 400; ++i)
{
double y = (double)(i * i * i - 10 * i * i - 3 * i + 59 - 26099159)/(62398859-26099159);
SetPixel(hdc, i, (int)(y*(-1*500)+200), RGB(0,100,255));
}
EndPaint(hwnd, &ps);
1 Найти минимальные и максимальные значения аргумента (это просто края отрезка X0, X1) и функции на заданном отрезке
2 Рассчитать коэффициенты для преобразования значений в координаты, исходя из размеров прямоугольника вывода
Y_Coeff = (Y_Max - Y_Min) / (Func_Max - Func_Min)
3 Для графического режима по умолчанию MM_TEXT
Y-ось направлена вниз, поэтому координаты для Y = F(X)
:
Y_Coord = YMax - (Y- Func_Min)* Y_Coeff
X_Coord = XMin + (X - X0) * X_Coeff
4 Чтобы лучше было видно, рисовать с помощью LineTo
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Нужно удалять файлы, в том числе и файлы "Только чтение"Если в свойствах стоит галочка "Только чтение", то через remove() удалить не получается
Я нашел оболочку для curl и пытаюсь ее "собрать" Что я сделал: