nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

Тестируем вычисление масштаба

Сразу посмотрим дамп памяти по окончании работы:


Фиолетовым отмечены метрики Манхэттенская и Чебышевская, синим - кватернион, тёмно-зелёным - посчитанный масштаб (мантисса) и количество точек к обработке (нумерация с нуля).

Видно, что в кватернионе два последних элемента занулились, так и задумано - крен это поворот вокруг оси X, а повороты вокруг осей Y и Z (те самые "ракурсы") по аффинному приближению считать - дело неблагодарное, лучше оставить нули. Если приглядеться, кватернион ненормирован, его "длина" составляет 0,995. Всё верно: мы пока решили нормализацию не вызывать. Хуже всего с нормой здесь будет при крене в ±90°, кватернион будет 1/2 + 1/2i, с нормой около 0,707 (один делить на корень из двух). Четырёх итераций по методу Ньютона хватит, чтобы отнормировать его, насколько это возможно в 16 битах.

Если записать в целочисленном десятичном виде нашу матрицу, получается так:


Сейчас проверим, правильно ли всё посчиталось...


Нам нужны два числа: разность диагональных элементов, 24514-20215 = 4299, и сумма двух других, 122+122 = 244. Представляя их как точку, можно получить две метрики. Манхэттенская - это просто сумма модулей, 4299+244 = 4543 = 0x11BF. Чебышевская - это самый большой из этих двух модулей, то есть просто 4299 = 0x10CB. Взглянем ещё раз на дамп, значения выделенные фиолетовым - это они.

Из них мы приближённо ищем Эвклидову метрику, взяв Манхэттенскую с весом 11010/32768, и Чебышевскую с весом 21758/32768. Получиться должно 4381. Если "честно" посчитать корень из суммы квадратов, выходит 4306, ошибка в 1,7%, для наших целей жить можно. (всё равно этот корень всегда довольно мал по сравнению с двумя другими слагаемыми, так что общая ошибка измерения масштаба не превысит 0,4% по вине этого приближения)

И далее, мы складываем два диагональных элемента, добавляем это наше приближение к Эвклидовой метрике, и выходит 20215+24514+4381 = 49110. Это больше 32767, поэтому сразу же срабатывает условный переход JO (Jump if Overflow), после чего мы однократно делим это значение на 2, что даёт 24555 = 0x5FEB. Именно его мы видим выделенным тёмно-зелёным.

Разве что экспоненту мы по дампу определить не можем, т.к пока она лежит только в регистре j. Но можем на "осциллограмме" проверить, действительно ли мы зануляем j:



Да, всё в порядке. Флаг знака устанавливается на команде SUB, а команды Acc и ADD его не трогают, как и было задумано.

Если интересно, вот листинг участка с "осциллограммы":

7E  B821                  JL      @@skipCheb ;лучше подошел бы JGE и поменять местами C и [SP+1]. Разница при нуле-на 1 больше операций.
7F  D083                  [Y+1]   C   ;обновили Чебышевскую                   
80  A822      @@skipCheb: iLOOP   @@loop
81  80F0                  Acc     [SP+1]  ;3 для дальней дистанции, 5 для ближней
82  8308                  SUB     4       ;получили флаг
83  80C4                  Acc     [X+i]   ;добавили Txx
84  82CC                  ADD     [X+i^j] ;и Tyy
85  B823                  JL      @@skip
86  A103                  j       0               
87  8AD8          @@skip: C       [Y+k]
88  9201                  FMA     11010   ;ManhW
89  8AD0                  C       [Y+1]
8A  9224                  FMA     21758   ;ChebW
8B  BA25                  JO      @@endLoop



Работает, как задумано. Не уверен, что выдаст что-то осмысленное прямо сейчас, всё-таки камера "некалиброванная", но это дело поправимое.
Tags: ПЛИС, математика, программки, работа, странные девайсы
Subscribe

Recent Posts from This Journal

  • Лестница для самых жадных

    В эти выходные побывал на даче, после 3-недельной "самоизоляции". Забавно, как будто зима началась! Особенно грязные галоши остались на улице, в…

  • Возвращаемся к макету

    Очень давно макетом видеоизмерителя параметров сближения не занимался: сначала "громко думал" по поводу измерения его положения на аппарате, а потом…

  • Минутка живописи

    В процессе разгребания содержимого квартиры (после нескольких ремонтов) дошёл, наконец, и до картин. В кои-то веки их повесил. Куда их вешать -…

  • Костыль ноутбуку и кабели Франкенштейна (это не я!)

    Продолжаю разгребать хлам, накопившийся за много лет, раз уж всё равно на карантине сижу. Довольно продуктивный день: починил ноутбук (грубо, но…

  • Атомный файлсервер, убитые петухи и харакири андроида

    Продолжаю совершать хаотические движения по квартире, хвататься то за одну железяку, то за другую, с желанием каждую куда-нибудь "пристроить". "По…

  • Ещё про яркий светильник и ИБП

    Всё-таки применил лежащее дома барахло наиболее простым образом: А ещё наконец-то замерял температуру теплоотвода яркого светильника на кухне,…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments