Программа на си для построения графика функции
В этой статье мы разберем программу на языке программирования си для построения графиков функций. В нашей программе будут отражаться система координат с делениями и подписями на них и будут строиться графики двух функций, который может сам задать пользователь.
В программе на си для построения графика функции вводятся следующие константы
X0 , Y0 — координаты центра координат
k – масштаб одного деления на осях (сколько пикселов в одном делении)
Опишем все функции и процедуры используемые в программе для построения графиков функций
Подробно о задании функций и процедур в си
int osx (float x) переводит реальную координату на оси ox в координату экрана
int osy (float y) переводит реальную координату на оси oy в координату экрана
float F1 ( float x ) и float F2 ( float x ) задают функции , графики которых мы будем строить
void Point ( float x, float y, int color ) рисует точку графика функции на экране
Перед построением графиков функций необходимо построить систему координат. Для построения системы координат используется процедура
void Axes()
В этой процедуре в цикле for рисуются линии меток делений на равном расстоянии друг от друга, который определяется масштабом одного деления k и выводятся значения делений с помощью двух операторов
sprintf ( s, «%d», i ); // записываем в строковую переменную число деления
outtextxy ( xe-10, Y0+4, s ); // вывод числа
Процедура grafik1() и grafik2() строят графики функций f1 и f2
В этих процедурах в цикле for для всех доступных значений x определяется координата y и точка графика строится с помощью процедуры point()
Пример работы программы построения графиков на си, функции пользователь может менять
Программа на си для построения графиков функций
#include
#include //графический режим
#include // математические функции
//————————————————
const int X0 = 100, Y0 = 400;// координаты центра координат
const float k = 15;// масштаб в точках одного деления на графике
//——————————————
// перевод y в координаты экрана
//——————————————
int osx (float x)
return X0+k*x;
>
//——————————————
//перевод y в координаты экрана
//——————————————
int osy (float y)
return Y0-k*y;
>
// первая функция
float F1 ( float x )
return sqrt(2*x);
>
// вторая функция
float F2 ( float x )
return x*x/2;
>
// построение осей
void Axes()
int i, xe,ye,y1;
char s[10];
line ( X0, 0, X0, 599 ); // ось ox
line ( 0, Y0, 799, Y0 ); // ось oy
// метки на оси ox
for ( i = 1; i xe = osx ( i );
line ( xe, Y0-2, xe, Y0+2 ); // рисуем деление разметки
sprintf ( s, «%d», i ); // записываем в строковую переменную число деления
outtextxy ( xe-10, Y0+4, s ); // вывод числа
>
// метки на оси oy
for ( i = 1; i ye = osy( i+1 );
line ( X0-2, ye, X0+2, ye ); // рисуем деление
sprintf ( s, «%d»,i ); // записываем в строковую переменную число деления
outtextxy ( X0+10, ye+4, s ); // вывод числа
>
>
// построение точки графика функции
void Point ( float x, float y, int color )
int xe, ye;
xe = osx(x);
ye = osy(y);
if ( xe >= 0 && xe < 800 && ye >= 0 && ye < 600 )
putpixel(xe, ye, color);
>
// построение графика первой функции
void grafik1()
float x, h, xmin, xmax;
h = 1 / k;
xmin = (-X0)/ k;
xmax=(800-X0)/k;
for ( x = xmin; x Point(x, F1(x), WHITE);
>
>
// построение графика второй функции
void grafik2()
float x, h, xmin, xmax;
h = 1 / k;
xmin = (-X0)/ k;
xmax=(800-X0)/k;
for ( x = xmin; x Point(x, F2(x), WHITE);
>
>
// главная программа
main ()
initwindow ( 800, 600 ); // создать окно для графики
Axes(); // построение и разметка осей координат
grafik1(); // строим график первой функции
grafik2(); // строим график второй функции
getch(); // ждать нажатия на клавишу
closegraph(); // закрыть окно для графики
>
Полезно почитать по теме построение графиков функций в программа си
Графика в си
Процедуры и функции в си
Комментарии ( 0 )
Нет комментариев. Ваш будет первым!
Построение графика функции на языке C?
Добрый день, подскажите как максимально просто построить график функции средствами языка C?
#include #include int main() < float x, y, z, step; printf("input x:\n"); scanf("%f", &x); printf("Input y:\n"); scanf("%f", &y); printf("input step:\n"); scanf("%f", &step); printf("result:\n"); for(int i = 0; i < 32; i++) < z = (sin(x)+cos(y))/(cos(x)-sin(y))*tan(x*y); printf("%.2f\t %f\n", x, z); x += step; >>

В итоге чтобы получить что то максимально похожее на график из Excel:
- Вопрос задан более трёх лет назад
- 5842 просмотра
Построение графика функции
Разработать программу для построения графика функции у = 2*sinx*e^4/5 . Считать из файла х функции. График функции построить в интервале от -50 до 50. Результатом работы программы будут считаться два массива, которые содержат значения промежуточные значения x и y для интервала [-50; 50]. Возможно кто-то сможет построить график по этим значениям, это будет еще лучше.
К сожалению, решения данной задачи пока нет. Если Вы решили эту задачу, сообщите нам, и мы выложим её на сайте.
Следующие статьи помогут вам в решении данной задачи:
Дата: 13.01.2014
Поделиться:
Комментарии
Ihor Lokki
08.03.2015 Решение с использованием OpenGl:
#include #include #include #include #include #include int count = 0; // Размер масива У,Х float* X; // масив для хранение х-ов float* Y; // масив для хранения у-ов void display() < // Функция перерисовки дисплея glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINES); glColor3f(1.0, 0.0, 0.0); glVertex3f(0, 50, 0); // Рисование системи координат glVertex3f(0, -50, 0); glVertex3f(-50, 0, 0); glVertex3f(50, 0, 0); for(int i = -11; i < 8; i++)< glVertex3f(10 + i * 5, -2, 0); glVertex3f(10 + i * 5, 2, 0); >for(int i = -11; i < 8; i++)< glVertex3f(-2, 10 + i * 5, 0); glVertex3f(2, 10 + i * 5, 0); >// Конец рисования системы крдинат glEnd(); glBegin(GL_POINTS); // Рисование точок графика функции float y; for(int i = 0; i < count; i++)< glVertex3f(X[i], Y[i], 0); >glEnd(); glutSwapBuffers(); > int main(int argc, char** argv) < std::vectorarr; // Вектор в котором будем хранить даные из файла std::ifstream fin; // Для вивода даних из файла std::string path; // Путь к файлу do< // Цикл который обеспечывает открития файла std::cout>path; fin.open(path.c_str()); if(!fin.is_open()) < std::cout>while(!fin.is_open()); float i = 0.0; while(!fin.eof())< // Запись даних из файла в вектор fin>>i; arr.push_back(i); > fin.close(); for(int j = 0; j < arr.size(); j++)< // Цикл для подсчота х-ов в диапазоне if(arr[j] >-50.0 && arr[j] < 50.0) // [-50;50] < count++; >> X = new float[count]; // Создание масива с х Y = new float[count]; // Создание масива с У int n = 0; for(int j = 0; j < arr.size(); j++)< // Цыкл для записи даних(х) указаного if(arr[j] >-50.0 && arr[j] < 50.0)< // диапазона в масив Х X[n] = arr[j]; n++; >> for(int j = 0; j < count; j++)< Y[j] = 2*sin(X[j])*pow(M_E,4/5); // Заполнение масива У >// Стандартное создание окна в OpenGl glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(400, 400); glutInitWindowPosition(20, 810); glutCreateWindow("Rownanie"); glClearColor(0, 0, 0, 0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-55, 55, -55, 55, -100, 100); glutDisplayFunc(display); glutMainLoop(); delete [] X; delete [] Y; >
Sancho
Оставить комментарий
Вы должны войти, чтобы оставить комментарий.
Rust Journey: Хотите освоить язык программирования, который завоевывает мир?
Илон Маск, один из ведущих инноваторов нашего времени, утверждает, что за Rust будущее. А когда последний раз он ошибался в своих прогнозах?
✨ Не упустите свой шанс быть в авангарде IT-революции. Подписывайтесь на канал Rust Journey и начните свой путь в захватывающий мир Rust сегодня!
Построение графиков с модулем
путём преобразований
Если Вы попали на эту страницу из поисковика, миновав предыдущие разделы темы «Графики функций и их преобразования», то рекомендую сначала повторить графики основных элементарных функций и общие правила преобразования графиков функций.
В контексте построения графиков это означает использование преобразования симметрии относительно осей координат.


- Построить график функции y = f(x) .
- Исключить его часть, расположенную в отрицательной половине оси абсцисс. (Например, просто стереть ластиком, если график был построен карандашом.)
- Построить левую ветвь графика (при отрицательных x) симметричным отображением его правой ветви относительно оси Oy.
- Построить график функции y = f(x) .
- Участок графика, расположенный ниже оси абсцисс (при отрицательных y) развернуть на верхнюю половину координатной сетки преобразованием симметрии относительно оси Ox.
Пример 1.


В этом примере оба графика получены из графика функции y = x − 3.
Первый — преобразованием Гf(x) → Гf(|x|) , второй — преобразованием Гf(x) → Г|f(x)| .
Пример 2.


В этом примере оба графика получены из графика функции y = x 2 − 2x − 3.
Первый — преобразованием Гf(x) → Гf(|x|) , второй — преобразованием Гf(x) → Г|f(x)| .
Один из способов быстро и точно построить исходную параболу по характерным точкам показан в видео на канале Mathematichka.
III При построении из графика функции y = f(x) более сложных графиков, например, вида y = k·f (a|x| + b) + c или y = k·|f (ax + b)| + c тщательно соблюдайте последовательность преобразований.
Ниже показаны примеры графиков различных функций, содержащих модуль, которые получены из графика функции \(y=\sqrt.\) y = √|x| __ .
-
1.
2.
3.
4.
5.
| 1. \(y=\sqrt\) √x _ —> | 2. \(y=\sqrt<|x|>\) √|x| __ —> | 3. \(y=\sqrt<|x-1|>\) y = √|x − 1| _____ | 4. \(y=\sqrt<|x|-1>\) y = √|x| − 1 _____ | 5. \(y=|\sqrt-1|.\) y = | √x − 1 _ | |
IV Равенство вида |y| = f (x) по определению не является функцией, так как допускает неоднозначность при вычислении значения y. Однако линию на координатной плоскости оно задает, и эту линию тоже можно построить, исходя из графика функции y = f(x) .
Для этого нужно:
- Построить график функции y = f(x) .
- Исключить его часть, расположенную ниже оси абсцисс, поскольку указанное равенство возможно только для положительных значений f(x).
- Построить нижнюю часть линии (при отрицательных y) симметричным отображением относительно оси Ox.
Эти кривые также получены из графика функции \(y=\sqrt\). y = √x _ .
-
6.
7.
8.
| 6. \(|y|=\sqrt\) | 7. \(|y|=|\sqrt-1|\) | 8. \(|y|=\sqrt<|x|>.\) |
Пример 3.
Задан график функции y = x 2 .
Построить кривые, удовлетворяющие уравнению, |y| = x 2 − 2|x| − 5 .
Заметим, что x 2 = |x| 2 (значение четной степени, как и значение модуля, всегда неотрицательно). Поэтому, выделяя полный квадрат, преобразуем функцию к виду |y| = (|x| − 1) 2 − 6 и строим её график последовательными преобразованиями.
Строим график функции f(x) = (x − 1) 2 − 6 переносом на 1 вправо вдоль оси Ox, а затем переносом вниз на 6 единиц вдоль оси Oy.
Строим график функции f(|x|) = (|x| − 1) 2 − 6 с использованием преобразования симметрии относительно оси Oy.
Строим линии, удовлетворяющие уравнению |y| = (|x| − 1) 2 − 6 с использованием преобразования симметрии относительно оси Ox.
-
1.
2.
3.
4.
5.
6.
| 1.y = x 2 | 2.y = (x − 1) 2 | 3.y = (x − 1) 2 − 6 | 4.y = (|x| − 1) 2 − 6 |
| 5.y = (|x| − 1) 2 − 6, y ≥ 0 | 6.|y| = (|x| − 1) 2 − 6 |
Следующий график постройте самостоятельно, чтобы убедиться, что вы правильно поняли материал.
Пример 4.
Задан график функции y = x 2 .
Построить график функции y = |x 2 − 2x − 5| .

Сумма модулей
Если формула функции включает сумму или разность несколько модулей, то следует разбить координатную плоскость на участки и построить каждую ветвь графика отдельно. Границы участков определяются приравниванием каждого модуля к нулю и решением соответствующего уравнения. Подробный пример такого подхода можно увидеть в задаче 1 на странице, посвященной решению уравнений с параметрами.
Однако, если подмодульные выражения простые и содержат элементарные функции, графики которых вам хорошо известны, то можно получить результат прямым сложением ординат этих графиков в характерных точках.
Пример 5.
Построить график функции y = |x + 2| + |x − 1| .

Эти два модуля содержат только линейные функции, графиками которых являются прямые линии. В результате сложения должна получиться ломаная линия, состоящая из трёх звеньев. (2 модуля, следовательно 2 уравнения, каждое из которых имеет одно решение, следовательно 2 границы, которыми плоскость разбита на 3 участка.) Трёхзвенную ломаную можно построить по 4-ём точкам.
На одних осях независимо друг от друга строим графики функций y = |x + 2| и y = |x − 1| , используя сдвиг и отражение. Складываем ординаты в точках излома x = −2 и x = 1 и в двух удобных точках на крайних участках, например, при x = −3 и x = 3 . На приведенном рисунке красным цветом представлен результирующий график, полученный по этим 4-ём точкам: (−3;5 ), (−2;3 ), (1; 3), (3;7).
Теперь проверьте себя.
Пример 6.
Построить график функции y = |x + 2| + |x − 1| − |x| .


Понравились материалы сайта? Узнайте, как поддержать сайт и помочь его развитию.
Есть вопросы? пожелания? замечания?
Обращайтесь — mathematichka@yandex.ru
Внимание, ©mathematichka. Прямое копирование материалов на других сайтах запрещено. Ставьте ссылки.
