Вопрос Как нарисовать график функции ? -C++

Статус
В этой теме нельзя размещать новые ответы.
Регистрация
24 Дек 2013
Сообщения
82
Репутация
1
Спасибо
0
Монет
0
//Visual studio 2013
Как нарисовать график функции желтым цветом на синем фоне с подписными осями координат. Нужен самый простой пример.
#include "stdafx.h"
#include
#include
#include "graphics.h"
#include
#include
#include // содержит srand() и rand()
#include
using namespace std;

//0 — черный
//1 — синий
//2 — зеленый
//3 — голубой
//4 — красный
//5 — лиловый
//6 — желтый
//7 — белый
//8 — серый
//9 — свело - синий
//A — светло - зеленый
//B — светло - голубой
//С — светло - красный
//E — светло - желтый
//F — ярко - белый

// функция генерации случайного числа из диапазона от range_min до range_max включительно
int rrand(int range_min, int range_max) {
return rand() % (range_max - range_min + 1) + range_min;
}
const unsigned int ARRSIZE = 10;
const int min = 0;
const int max = 100;
int a[ARRSIZE];
int x[ARRSIZE];
int b[ARRSIZE];
int br[ARRSIZE];//по ф-ле
double y;
//int a = 5;

int main()
{
system("color 1F"); // Установка синего фона-1 и белого цвета шрифта F.
srand(static_cast(time(NULL)));
cout << endl;
// инициализация массива случайными значениями из диапазона -//min..max
for (int i = 0; i < ARRSIZE; i++) {
a = rrand(min, max);
b = rrand(min, max);
//y = 2 * sin(ar) * exp(ar/a);
//y = pow(ar, 2);
int y= cos(a * x + b) / sin(a * x + b);//ф-ла графика
cout << "element masiva a: " << i << "= " << a << endl;
cout << "element masiva x: " << i << "= " << x << endl;
cout << "element masiva b: " << i << "= " << b << endl;
br = y;
cout << "element masiva br: " << i << "= " << br << endl;
}
POINT op;
HWND hWnd = GetConsoleWindow(); //Получаем дескриптор окна консоли
HDC hDC = GetDC(hWnd); //Получаем контекст устройства по полученному дескриптору
SelectObject(hDC, GetStockObject(WHITE_PEN)); //Выбираем перо WHITE_PEN в контекст
for (int i = 0; i < ARRSIZE; i++) {
//MoveToEx(hDC, 50, 50, &op); //Ставим текущую точку в координаты 50,50
//LineTo(hDC, 635, 320); //Рисуем линию из текущей точки в точку 100, 200
MoveToEx(hDC, a, br, &op); //Ставим текущую точку в координаты 50,50
LineTo(hDC, a[i+1], br[i+1]); //Рисуем линию из текущей точки в точку 100, 200
}
ReleaseDC(hWnd, hDC); //"Освобождаем" контекст
int gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, " ");
int x = 30;
int y = 30;
for (int i = 0; i < ARRSIZE; i++) {
setbkcolor(6); //цвет фона
line(a, br, a[i + 1], br[i + 1]);
}
putpixel(x, y, RED);
outtextxy(200, 75, "hello");
system("pause");
closegraph();
return 0;
}
 
Не вдаваясь в детали алгоритма, я нашел 2 ошибки: // функция генерации случайного числа из диапазона от range_min до range_max включительно int rrand(int range_min, int range_max) { return rand() % (range_max - range_min + 1) + range_min; } Формула не правильная. Будет давать "плохие" случайные числа. (((long)rand())*(range_max - range_min + 1))/RAND_MAX+range_min будет правильнее ---- Цикл выходит за границу массива в строке ****** for (int i = 0; i < ARRSIZE; i++) { //MoveToEx(hDC, 50, 50, &op); //Ставим текущую точку в координаты 50,50 //LineTo(hDC, 635, 320); //Рисуем линию из текущей точки в точку 100, 200 MoveToEx(hDC, a, br, &op); //Ставим текущую точку в координаты 50,50 ******LineTo(hDC, a[i+1], br[i+1]); //Рисуем линию из текущей точки в точку 100, 200 } И здесь тоже for (int i = 0; i < ARRSIZE; i++) { setbkcolor(6); //цвет фона *****line(a, br, a[i + 1], br[i + 1]); }
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху