|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|
Нарисовать графики функций08.07.2023, 04:44. Показов 8750. Ответов 105
Метки нет (Все метки)
Здравствуйте! Нужно вывести(нарисовать) графики функций, но пока что не могу разобраться с параметрами, вот функции:
Для начала, хочется понять, что означают координаты: a - угол? k - не знаю, что это. Возможно, это коэффициент, обозначающий принадлежность числа к определённому числовому диапазону... n - тоже самое. t - точность или время? Пояснений к этим параметрам нет, какими должны быть диапазоны заданных значений... Если предположить, что 'a' - это угол, то тут ясно [0, 360], а вот с другими аргументами проблема.
0
|
|
| 08.07.2023, 04:44 | |
|
Ответы с готовыми решениями:
105
Нарисовать графики линейных функций Нарисовать графики Как нарисовать графики ? |
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|||
| 18.07.2023, 07:51 [ТС] | |||
|
Ex6_22.rar
0
|
|||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
|||
| 18.07.2023, 09:07 | |||
![]() Что еще стоит улучшить, так это правильный ноль графика и, возможно, риски отдельных чисел на осях. Если эта тема вам интересна, а не просто сдать и забыть, то стоит добавить автомасштаб по Y. А если совсем интересна, могу предложить практическую задачу
которую я решал года три назад: проводится физический эксперимент, в ходе которого записываются какие-то данные (напряжения, температуры, магнитные поля, все что угодно), их надо отобразить на графике. Сложность в том, что данные могут быть как сверхбольшими (1е+5), так и сверхмалыми (1е-9), соответственно график нужно масштабировать. Плюс красиво рисовать сетку и значения. Чтобы физик, который на это смотрит, понимал порядок величин.
https://www.cyberforum.ru/atta... 1591113051
0
|
|||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|||||
| 18.07.2023, 09:33 [ТС] | |||||
|
По X у меня масштабируется, в принципе можно установить не MM_ISOTROPIC, а MM_ANISOTROPIC тогда масштабирование по оси Y тоже не составит особого труда. А вот как рассчитывать значения для меток, пожалуй, тут нужна помощь.
0
|
|||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
|||||||
| 18.07.2023, 09:59 | |||||||
|
Идея в том, что количество меток на экране должно быть ограниченным. Если у вас 10000 точек, но область вывода 100х100, придется оставить всего 10 меток, каждые 1000 точек. В простейшем случае, если экран размером WxH, то W/10 точек. Вот только W может быть не целым числом, тогда ширину графика придется сделать больше, чем его реальный разброс по X. Округлить вверх до ближайшего круглого числа. Потом промежуточные точки. Я остановился на трех вариантах: риски каждую единицу (или каждый десяток, сотню, ...) 0, 1, 2, 3, 4,... Потом риски каждые две единицы: 0, 2, 4, 8. Потом каждые 5 единиц: 0, 5. Выбирается по масштабу. Отдельное развлечение если все точки лежат далеко от нуля. Скажем, от 100500,0 до 100500,4.
0
|
|||||||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|||||||||
| 19.07.2023, 05:46 [ТС] | |||||||||
|
Тогда получается 10 меток должны отражать как положительные величины так и отрицательные т.е. пять в положительном направлении и 5 в отрицательном, это я про ось Y.
0
|
|||||||||
|
Заблокирован
|
|
| 19.07.2023, 06:12 | |
|
чекбокс - "[0;0] не обязана быть на графике"
0
|
|
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||
| 19.07.2023, 09:35 | ||||||
|
Если вы про то, сколько засечек на осях ставить, это только экспериментально. Какой вариант покажется достаточно читаемым, чтобы числа друг на друга не наползали. Ну в смысле сначала для фиксированного размера графика подберете экспериментально, а потом можно будет изобретать алгоритм масштабирования. Но потом мы хотим построить функцию от 0 до 2. Если продолжать ставить метки с шагом 0,1, их получится уже 20 штук. При том же размере поля для рисования мы уже получим месиво. Поэтому стоит сделать шаг 0.2, и меток снова будет 10. А потом от 0 до 3. И вот тут делать шаг по 0.3 уже плохая идея, потому что метки будут 0,0; 0,3; 0,6; 0,9; 1,2; 1,5; 1,8; 2,1; 2,4; 2,7; 3,0. То есть метки 1.0 и 2.0 вообще не нарисуются, а это неудобно. Поэтому можно сделать шаг 0,5 и получить метки 0,0; 0,5; 1,0; 1,5; 2,0; 2,5; 3,0, что уже удобно для чтения человеком. А поскольку система счисления у нас десятичная, то промежуток между 0 и 10 мы можем разделить только на 1, 2, 5 и 10. Если сильно хочется, можно добавить еще промежуточную сетку вроде 0; 0,25; 0,5; 0,75; 1. --- Если хотите, можете посмотреть как это у меня получилось.
0
|
||||||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|||
| 20.07.2023, 06:58 [ТС] | |||
|
У меня вот какая поделка получилась. Нужно что-то вывести в качестве числовых значений, только что из четырёх параметров выводить... Вместо X и Y нужно подставить какие то поясняющие величины, допустим, по X время t, а по Y, видимо, значение N... А если предположить, что значения будут очень большие или очень маленькие, то тут нужно корректировать график динамически так что бы было читаемо цифровые значения не налезали на график или не уходили за границы окна, но как-то ничего стоящего в голову не идёт из того, что можно применять в данном случае.
0
|
|||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||||
| 20.07.2023, 11:33 | ||||||||
|
Допустим, у вас функция меняется от -3 до 8 по Х и от 25 до 25.1 по Y, а размеры области графика 600х400 (чтобы влезло в "стандартный экран" 640х480). Значит, чтобы пересчитать X графика в координату пикселя, надо x = (X+3)/(8-3)*600. Аналогично для Y: y = (Y-25)/(25.1-25)*400. Какая-нибудь OpenGL умеет масштабировать и сама (в моем примере это, кстати было), но даже там вам придется рисовать оси, рисовать отметки на них, чиселки и т.д., что все равно потребует пересчета. Впрочем, само по себе это тоже интересное упражнение: принять от пользователя строку и нарисовать ее на экране, чтобы и подстрочные индексы были, и надстрочные, и буквы латинские, русские, греческие. Ну мало ли, я пытаюсь удельное сопротивление измерить ρ, Ом*м/мм².
0
|
||||||||
|
COM‐пропагандист
|
|
| 20.07.2023, 13:32 | |
|
Тут и думать нечего. Достаточно умножить каждую точку графика на матрицу масштабирования.
0
|
|
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
||||||||
| 21.07.2023, 10:29 [ТС] | ||||||||
|
Не по теме:
Ну вот, какие то формулы уже появились, осталось только разобраться. Решаю.
0
|
||||||||
|
Заблокирован
|
||
| 21.07.2023, 10:49 | ||
|
0
|
||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||||
| 21.07.2023, 11:12 | ||||||||
x = (X+3)/(8[B]+[/B]3)*600. И да, будет лучше если вы сами разберетесь с линейным преобразованием. В данном примере нам надо каждую точку из диапазона (-3 ... 8) перевести в диапазон (0...600), а каждую точку из (25...25.1) - в диапазон (0...400). Естественно, X и Y переводятся независимо. Для начала разберемся с X. Точке -3 соответствует 0, точке 8 соответствует 600. Точке 5 соответствует что?
0
|
||||||||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|||||||
| 21.07.2023, 23:40 [ТС] | |||||||
|
0
|
|||||||
|
COM‐пропагандист
|
||
| 22.07.2023, 08:24 | ||
|
Ещё можете убрать множественный вызов LineTo в цикле. Лучше заранее вычислите массив точек и отправьте его в функцию PolylineTo. Это быстрее.
0
|
||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||||||
| 22.07.2023, 09:31 | ||||||||||
a, n, k, то это могут быть, например, амплитуда, частота и затухание. Попробуйте их немного поменять, и убедитесь, что чем больше a, тем больше размах по вертикали. Чем больше n, тем выше частота, больше периодов колебаний. Чем больше k, тем быстрее график стремится к нулю. Но это опять физика, а не математика или программирование. Вы ведь хотите уметь строить любой график.1.234e+5, а 123.4e+3 или 0.1234e+6 или 123.4к.Неплохая задача на украшательство, которую я в свое время решать не стал. Для практического применения достаточно простейшего экспоненциального формата. Кстати, с ним был один фейл
Писал программу для управления мощным источником питания, надо было напряжение на нем от нуля увеличить до 100 В, потом снизить до нуля, переключить полярность, снова поднять до 100 В и снова снизить до нуля. Напряжение там задается строкой вроде "VOLT 12.3\r\n" - это выставит 12.3 вольта. А потом смотрю, а прибор с ума сходит: до максимума напряжение поднял, до нуля опустил - и все. Вроде бы должен снова вверх идти, ан нет, застыл на нуле. А при следующем запуске все нормально. Нестабильная какая-то штука получилась. В общем, в итоге выяснилось, что я-то по привычке задаю дробные числа в адаптивном формате "%g", то есть пока их удобнее представить без экспоненты, система и представляет их без экспоненты, и для источника питания это нормально. А вот когда число становится слишком большим или слишком маленьким, переходит на экспоненциальную форму. И вблизи нуля получалась строка вроде VOLT 1.23e-18\r\n", на которую источник питания изумлялся и продолжал это делать до перезагрузки. Заменил формат на sprintf(buf, "VOLT %.3f\r\n", U); и пока сбоев не было.Это так, поделился историей из жизни. Есть, конечно, системы вроде того же OpenGL, где просто меняются указатели, но даже так это отдельная операция. В общем, двойная буферизация медленнее прямого рисования, но зато лишена артефактов и мерцания, потому ее и применяют. А если уж гоняться за скоростью, то первое, что нужно сделать - выкинуть winAPI и использовать графическое ускорение вроде того же OpenGL.
0
|
||||||||||
|
COM‐пропагандист
|
|||
| 22.07.2023, 10:19 | |||
|
Это намного медленнее, чем отправить в видеокарту уже готовую картинку.
0
|
|||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
|||
| 22.07.2023, 22:46 | |||
|
0
|
|||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
||||||||||||||
| 23.07.2023, 00:17 [ТС] | ||||||||||||||
|
Условимся, что ширина области вывода 600, высота 400. Для начала, как рассчитать сколько меток нужно по оси X и сколько по оси Y? Не по теме:
Кликните здесь для просмотра всего текста
0
|
||||||||||||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||||
| 23.07.2023, 08:45 | ||||||||
|
На счет количества меток - а ваше предположение каково? Возможно, так будет нагляднее
Развлекался тут с расчетом трехмерной графики на ассемблере. И случайно оказалось, что виртуальный экран можно сделать побольше, тогда он захватывает не только свою память, но и задний буфер. Соответственно можно разглядеть как сначала на заднем буфере по одному рисуются треугольники, а потом копируются на передний буфер и тут же стирается с заднего буфера. https://www.youtube.com/watch?v=d-nPmGgqwOE
0
|
||||||||
| 23.07.2023, 08:45 | |
|
Графики функций Графики функций в с++
Графики функций Использование графики. Нарисовать точку. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|