Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как бы сделать так же ?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
zombi
Есть подпрограмма написанная давным давно и не мной.
На вход ей поступают два параметра START-END (к примеру 10-100, 100-1000, 500-5000 ...) эти параметры могут быть любыми целыми числами.
При каждом следующем вызове на выходе получаем промежуточное значение, тоже целое число которое больше предыдущего на некую величину (на картинке красная).
Можно ли на основании приведённых таблиц понять каким образом (по какой функции) вычисляется эта дельта.
Исходников нет. Дизассеблировать нет возможности.
Нужно написать что то своё что будет работать также, ну или очень похоже.
Пока только вижу что первое число равно примерно половине STARTа и дельта вдвое меньше него.
А дальше ...
AHTOXA
Может быть, это алгоритм Брезенхема?
arttab
муторно, но можно из прошивки выковырять.
приходилось ковырять прошивки из-за отсутствия исходников и документации на протоколы
Snaky
Имя функции ничего не подсказывает?
Что будет если задать диапазон отличный от декадного как у вас? 1-2, 1-1000, 10-20 например
ILYAUL
Из таблицы как-то так видно , что если из 6-4=2 Из 9-6=3 из 11-9=2 ... из 423-396=27 ну и так далее....
Snaky
Цитата(ILYAUL @ Nov 13 2012, 15:06) *
Из таблицы как-то так видно , что если из 6-4=2 Из 9-6=3 из 11-9=2 ... из 423-396=27 ну и так далее....

Так автор именно так и вычислил красные цифры, если вы не поняли :>

Более интересен вопрос как функция выбирает первое значение и количество шагов до максимума.
ILYAUL
Цитата
если вы не поняли :>

Да не врубился, утро ....
Цитата
как функция выбирает первое значение и количество шагов до максимума

Цитата
ей поступают два параметра START-END.....
Очень похоже , что задается диапазон
Цитата
каждом следующем вызове на выходе получаем промежуточное значение... которое больше предыдущего....

Получается , что значения могут только расти. Может график по таблице нарисовать, у меня под рукой миллимитровки нет..
Snaky
Цитата(ILYAUL @ Nov 13 2012, 15:37) *
Получается , что значения могут только расти. Может график по таблице нарисовать, у меня под рукой миллимитровки нет..

ну да, растут, от начала диапазона до конца. Практически с постоянным приращением. Как тут заметили, смахивает на Брезенхэма. Гораздо любопытнее как определяется первая точка ИЛИ количество шагов. Почему чтобы пройти от 10 до 100 надо 34 шага, а от 500 до 5000 - 49?

А миллиметровку заменил Excel уже с конца прошлого века примерно ;>
ILYAUL
Цитата
ИЛИ количество шагов
так может оно и задаётся диапазоном т.е изначально известно
Цитата
А миллиметровку заменил Excel уже с конца прошлого века примерно ;>

Не люблю я его с детства
Flexz
Додумывать - какой же там внутри алгоритм, есть дело неблагодарное. Два варианта - таки дизассемблировать, либо построить аппроксимацию.
Для аппроксимации стоит построить несколько графиков - число шагов от диапазона, число шагов от первого-последнего аргумента (если с последним аргументом более-менее ясно - это конец диапазона, то с первым непонятно - он не является началом диапазона), ну и собсетвнно графики значений.

PS и это не Брезенхем, во-первых рост нелинейный, во-вторых последняя дельта выбивается из ряда, Брезенхем такого себе не позволяет.
редактор
Цитата
последняя дельта выбивается из ряда

Это может быть из-за того, что бы не выйти за диапазон при очередном приращении.
zombi
Еще заметил что нету ни одной дельты с нулевым значением в последнем разряде. (после 29 может быть 28,31 но не 30; 99 - 101; 109 -111).
Видать хотят что бы младший разряд каждого следующего значения обязательно менялся.
По моему дельта с каждым шагом увеличивается на некую не целую константу и округляется до целого перед сложением.
Величина начального значения вполне может по таблице выбираться.
Параметр START может быть любым целым числом но в реальном изделии их не так уж и много.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.