7 / 5 / 2
Регистрация: 25.05.2013
Сообщений: 112
|
|
1 | |
Расчёт шкалы и цены деления06.11.2019, 00:05. Показов 11995. Ответов 21
Метки нет (Все метки)
Всем привет!
Пытаюсь нарисовать шкалу для диаграмм некоторых значений и не могу понять, как лучше сделать. К примеру: есть набор значений, который изменяется от -268 до 38009 (минимум и максимум). График построен, нужно нарисовать шкалу к этой диаграмме. Шкала должна быть умещена в определенную высоту (высота может меняться и шкала перерисовывается). Количество делений на шкале меняется в соответствие с доступным местом, а минимум и максимум остаются такими же, а так же нужно выравнять цену деления шкалы. Что приходит в голову:
Суть вопроса: Как правильно рассчитать шкалу и цену деления ? С учетом того, что высота шкалы может меняться, а параметры могут быть разными и диапазоны измерений тоже разные (могут быть в пределах от -2 до 2, например). Может алгоритм какой есть для подобных случаев ? Как правильно рассчитывается кратность цены деления, количество делений и т. д. Спасибо!
0
|
06.11.2019, 00:05 | |
Ответы с готовыми решениями:
21
Определение цены деления шкалы прибра Определить цену деления шкалы прибора цена деления шкалы прибора равна 0,3 Определить цену деления шкалы и чувствительность миллиамперметра |
случайный прохожий
2934 / 1951 / 606
Регистрация: 20.07.2013
Сообщений: 5,160
|
|
06.11.2019, 09:02 | 2 |
Можешь глянуть здесь: Динамическое изображение: астроида
Правда, у меня количество делений не меняется (меняется масштаб, цена деления и мин. / макс. значения).
0
|
06.11.2019, 10:17 | 3 |
Там нету ответа на вопрос ТС'а. Его не интересует, как нарисовать шкалу. Его интересует, каким правильным математическим алгоритмом рассчитать диапазон шкалы и цену деления в том случае, когда имеем "кривые" граничные значения параметра. Чтобы шкала получилась красивая, в том смысле, что удобная для восприятия человеком (а не машиной)
0
|
7 / 5 / 2
Регистрация: 25.05.2013
Сообщений: 112
|
|
06.11.2019, 14:52 [ТС] | 4 |
Evg, совершенно в дырочку. Есть идеи ? или хотя бы как загуглить, а то мозг кипит немного.
0
|
06.11.2019, 21:47 | 5 |
Нету. Просто когда-то мне это тоже нужно было, я самостоятельно ничего интересного не нашёл. В первую очередь из-за того, что не понятно, как правильно сформулировать запрос (хз как эта проблема по научному называется)
P.S. Я попросил модераторов перенести тему в другой раздел, относящийся к теории, а не к Borland'у
0
|
Модератор
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
|
|
07.11.2019, 10:52 | 6 |
А если макс и мин имеют одинаковый знак? Правильно:
abs(MAX - MIN) = 38009 - (-268) = 38277 Добавлено через 42 секунды Чем не устраивает алгоритм, который Вы привели?
0
|
7 / 5 / 2
Регистрация: 25.05.2013
Сообщений: 112
|
|
07.11.2019, 11:26 [ТС] | 7 |
Спасибо за ответ!
Не понимаю, как должна выглядеть шкала. В примере я привел число делений 25 на шкале, но это больше случайное значение. Как шкала должна выглядеть "правильно" - с большей частотой делений или с минимальной? Как рассчитать эту оптимальность? От частоты делений шкалы будет зависеть цена делений, соответственно, если значение цены кривое, то есть надо выравнять. Чтобы выравнять, я предполагаю, нужно понять порядок числа, последовательно разделяя его на 1/10/100/1000/..., пока целая часть не будет равно 0, а потом дополнить число до круглого значения из предыдущего порядка (то есть если цена деления 1578, то порядок всего числа 1000, а дополняем до следующей сотни) или как правильно это делается ? Или вообще наоборот: сначала считаем цену деления оптимальную (что может являться критерием оптимальности?), а уже потом строим шкалу с нужной частотой?
0
|
2376 / 834 / 317
Регистрация: 10.02.2018
Сообщений: 1,968
|
|
07.11.2019, 13:15 | 8 |
Самый простой вариант - не заморачиваться, сделать шкалу от минимума до максимума с разбиеним на нужное количество делений. Получатся кривые числа, ну и ладно.
Можно подсмотреть в каком-нибудь редакторе, который строит графики и делает к ним шкалы. Хоть Excel, хоть математические пакеты типа Mathcad. То же как-то нужно было подобное, готового решения у меня нет, только несколько приёмов. Это всё индивидуально и то, что хорошо для одной задачи, может не подходить к другой. 1) Максимальное количество делений шкалы ограничивается размером "полотна". Нет смысла делать деления в каждом пикселе, они все сольются. Нужен отступ между делениями. Выбрать минимальный отступ можно из субъективной оценки "красивости" получающейся сетки. Предположим, что минимальный отступ между двумя делениями возьмём в 10 пикселей. Если размер полотна "400" пикселей, значит делений должно быть не больше 40 (400/10). 2) Выбор шага между делениями зависит от природы измеряемой величины. Больший уровень шкалы может быть представлен некоторым количеством единиц меньшего уровня. Количество единиц меньшего уровня должно укладываться ровно в больший уровень. Если переход с уровня на уровень составляет 10, то количество делений меньшего уровня может быть 2, 5 или 10. Если переход с уровня на уровень составляет 60 (секунды, минуты, часы), то количество делений меньшего уровня может быть 2, 3, 4, 5, 6, 10, 12, 15, 20, 30 или 60. 3) Определяем отображаемую дельту значений. Находим наибольший уровень шкалы. Начинаем переходить к более мелким шкалам по числам из пп2, т.е. увеличиваем количество делений. Получается некое количество делений, если оно меньше максимального из пп1, то переходим к ещё более мелкой шкале. И так далее. 4) Выравнивание смещения по 0. Предположим, что выбрана шкала с шагом 5 единиц. Можно разметить график в точках 11, 16, 21, 26... Можно разметить график 12, 17, 22, 27... Но всё это смотрится немного криво. Лучше исходить из того, что идя по шкале с заданным шагом мы всегда придём в 0. Таким образом правильнее размечать 10, 15, 20, 25...
0
|
Модератор
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
|
|
07.11.2019, 14:38 | 9 |
Нет универсального (для всех задач) ответа. На некоторых часах между соседними делениями 5 минут (всего 12 делений и нет секундной стрелки), а на некоторых - 1 секунда (всего 60 делений и есть секундная стрелка).
0
|
7 / 5 / 2
Регистрация: 25.05.2013
Сообщений: 112
|
|
07.11.2019, 14:50 [ТС] | 10 |
Ровно так и сделал, но по ТЗ есть мутные намеки на визуальную оценку диаграмм, и руководитель развеял сомнения, сказал, что выравнять и цену и минимум с максимумом всё-таки надо.
Спасибо за помощь!
0
|
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
07.11.2019, 15:39 | 11 |
В гугле “перевод числа из одного диапазона в другой”
Преобразовать числа из одного диапазона в другой (value-From1)/(From2-From1)*(To2-To1)+To1; Зная мин From1, макс From2 нужно найти процентное значение value относительно его пределов. “(value-From1)/(From2-From1)” вот тут это и делают, вроде как называют нормализация, возвращает от 0 до 1, это просто аналог процентов. Дальше зная мин To1, макс To2 второго числа нужно умножить процентное значение value на второе число. “(value-From1)/(From2-From1)*(To2-To1)” “+To1” это добавляют мин второго числа т.к. обычно координаты графика не с нуля.
0
|
07.11.2019, 19:43 | 12 |
Допустим, интересующий диапазон значений - от 0.0013 до 99.7391. Нам нужно разбить весь интервал на 10 отрезков. Посчитай, что получится по твоим формулам. И прикинь, как бы ты сделал без формул
0
|
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
07.11.2019, 20:38 | 13 |
Разделить ответ на размер дискретного значения числа2 и округлить до целых это высшая математика?
0
|
07.11.2019, 20:43 | 14 |
Ты приведи конкретные значения, которые получаются по формулам. И опиши, что к чему и по каким формулам округлял. И чтоб не смущали понятия типа "целое" замени в задаче диапазон значений на "от 13 до 997391"
0
|
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
07.11.2019, 20:43 | 15 |
Ага а потом и умножить на размер шага числа2 хех…формула то растет.
0
|
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
07.11.2019, 21:10 | 16 |
Как-то так выходит, пару добавлений.
From1=-268 From2=38009 To1=0.0013 To2=99.7391 Step=(To2-To1)/10=9.9738 Value2=round(((Value-From1)/(From2-From1)*(To2-To1))/Step)*Step Value3=If[Value2==0, To1, Value2]
0
|
07.11.2019, 22:24 | 17 |
Что-то нифига не понял, откуда у тебя так много входных параметров, что конкретно они означают, и что такое Value. Есть у меня подозрение, что ты банально не правильно понимаешь поставленную задачу
Перефразирую задачу в конкретных числах. Мы имеем некий набор точек, условно набор значений функции по оси Y. Ось X нас не интересует. Известно, что минимальное значение Y - это 0.0013, максимальное значение Y - 99.7391. Мы хотим нанести значения на график. Нам нужно вычислить, как будет выглядеть сетка по оси Y, чтобы это было удобно для восприятия На входе: LOW=0.0013 - минимальное значение параметра HIGH=99.7391 - максимальное значение параметра Что хотим получить на выходе: START=0.0000 - начальное значение сетки STEP=10.0000 - шаг сетки COUNT=10 - количество интервалов в сетке Т.е. 3 выходных параметра описывают сетку Y со значениями: 0.0000, 10.0000, 20.0000 ... 100.0000
0
|
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
07.11.2019, 23:29 | 18 |
Печалька.
А так? From1=LOW=0.0013 From2=HIGH=99.7391 To1=START=0.0000 STEP=10.0000 - шаг сетки, COUNT=10 количество интервалов To2= START+STEP* COUNT=0+10*10=100 Step=STEP Value2=round(((Value-From1)/(From2-From1)*(To2-To1))/Step)*Step Value3=If[Value2==0, To1, Value2]
0
|
08.11.2019, 10:58 | 19 |
Я пас. Ты упорно не хочешь понять смысла задачи
Добавлено через 1 час 22 минуты Почему-то ты эти параметры считаешь ВХодными. А они как раз ВЫХодные. Т.е. их надо рассчитать, а не вбивать в код Я не понимаю, что такое Value, т.к. оно не было инициализировано. Да и не понимаю синтаксис того, что есть Value3. Но сильно подозреваю, что ты пытаешься нарисовать сетку по заранее рассчитанным параметрам. А задача не в этом. Задача состоит в том, чтобы алгоритмически рассчитать те параметры, которые у тебя хардкодом вбиты как константы. В посте #17 я всё четко расписал. ВХодных параметров у нас только 2 (LOW и HIGH). Надо рассчитать 3 ВЫХодных параметра (START, STEP, COUNT). Для этих параметров у меня уже вбиты значения, это как бы желаемый ответ
0
|
1471 / 826 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
08.11.2019, 11:22 | 20 |
По ссылке поста 11 никак не пройти? Там жевать не пришлось.
Зачем тогда их определили =)). If[ <Condition>, <Then>, <Else> ] Если <Condition> верно, вернуть <Then>, иначе<Else>. Тут просто STEP=(HIGH - LOW)/ COUNT Мда…кароч суть задачи я понял так: Cделать уравнение перевода по линейному закону величину от From1=-268 до From2=38009 в величину от To1=0 до To2=100 с шагом Step пикселей.
0
|
08.11.2019, 11:22 | |
08.11.2019, 11:22 | |
Помогаю со студенческими работами здесь
20
Какой будет цена деления шкалы прибора? программа должна переводить температуру в другие шкалы и шкалы выбирает юзер но что то не работает Расчет цены Расчет цены Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |