|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
|
Нарисовать графики функций08.07.2023, 04:44. Показов 9036. Ответов 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
|
|||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,097
|
|||
| 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
|
|||||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,097
|
|||||||
| 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
|
|
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,097
|
||||||
| 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
|
|||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,097
|
||||||||
| 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
|
||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,097
|
||||||||
| 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
|
||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,097
|
||||||||||
| 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
|
|||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,097
|
|||
| 22.07.2023, 22:46 | |||
|
0
|
|||
|
225 / 39 / 4
Регистрация: 18.11.2012
Сообщений: 1,638
|
||||||||||||||
| 23.07.2023, 00:17 [ТС] | ||||||||||||||
|
Условимся, что ширина области вывода 600, высота 400. Для начала, как рассчитать сколько меток нужно по оси X и сколько по оси Y? Не по теме:
Кликните здесь для просмотра всего текста
0
|
||||||||||||||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,097
|
||||||||
| 23.07.2023, 08:45 | ||||||||
|
На счет количества меток - а ваше предположение каково? Возможно, так будет нагляднее
Развлекался тут с расчетом трехмерной графики на ассемблере. И случайно оказалось, что виртуальный экран можно сделать побольше, тогда он захватывает не только свою память, но и задний буфер. Соответственно можно разглядеть как сначала на заднем буфере по одному рисуются треугольники, а потом копируются на передний буфер и тут же стирается с заднего буфера. https://www.youtube.com/watch?v=d-nPmGgqwOE
0
|
||||||||
| 23.07.2023, 08:45 | |
|
Графики функций Графики функций в с++
Графики функций Использование графики. Нарисовать точку. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|