nabbla (nabbla1) wrote,
nabbla
nabbla1

Category:

QuatCore: Испытываем ABS

Вроде бы поправили вычисление модуля числа (абсолютного значения, ABS) в АЛУ, пора его хоть немного проверить.

В том месте, где раньше возник "затык" - всё хорошо, число 72 осталось как есть, и число 16 осталось как есть. Но как-то это не до конца убеждает, тесты получились односторонними. И в прошлом месте кода, при вычислении кватерниона, тоже число положительное (косинус угла крена) попалось, так что мы вообще ни разу не видели, как отрицательное число "теряет знак".

Пора это исправить, для чего мы введём исходные данные - картинку "вверх тормашками", то есть крен 180 градусов:


и посмотрим, что получается...



Теперь на вход аффинного алгоритма поступят следующие точки:
(-393; 994)
(547; 299)
(-474; 26)
(-45; 0)


(они приведены в порядке "сверху вниз", в котором их регистрировала фотоприёмная матрица, но в правой системе координат)

Матрица аффинного преобразования выходит:




Тут же видно, как элементы вне главной диагонали вычитаются один из другого, что даёт единицу, а элементы главной диагонали складываются, давая -873.

После этого запускается нормировка, приводящая к co=-32768, si=1. И затем мы должны посчитать выражение (1+|-32768|)/2:



Видно, как мы берём модуль от -32768, и получается ответ 32767 (ещё и насыщение прошло, как всегда абсолютно необходимо), делим его на два (результата пока не видим), прибавляем 16384 ("одну вторую"). В рамку обведено присвоение, которое мы раньше "перепрыгивали" инструкцией JGE (прыгнуть, если "больше или равно"), а в этот раз - нет. Флаг S хранит этот знак "минус" ещё с последнего умножения при нормировке, его результатом становится именно значение co. И наконец, мы видим, что результат того выражения: 32767, что и следовало ожидать.

На скриншоте из начала поста показан кватернион поворота и финальная матрица преобразования (из которой выкинули крен).

Кватернион получается: 0 + 32767i + 0j + 0k, это в точности поворот на 180 градусов "по крену".

Матрица:



То есть, из неё "убрали" (насколько смогли) поворот на 180 градусов, остался масштаб и совсем небольшой "ракурс".

И ещё, в процедуре нахождения масштаба (о ней подробнее следующим постом) мы переставили местами два адреса, чтобы разность всё-таки получалась отрицательной (это без разницы, т.к всё равно стоит модуль), проверить ту страшную команду
ABS Acc


Первый раз в аккумуляторе положительное число, единичка:

Как видно, взятие модуля от единички так и даёт единичку. Уже радость.

Второй раз - там минус единица, FFFF в дополнительном коде:

который при взятии модуля становится единицей - вот оно счастье!


После жутких тормозов, "в следующей серии" - про измерение масштаба...
Tags: ПЛИС, математика, программки, работа, странные девайсы
Subscribe

  • Огари разговаривают

    Сегодня по пути на работу встретил огарей прямо в Лосином острове, на берегу Яузы. Эти были на удивление бесстрашны, занимались своими делами, не…

  • Очень запоздало о лыжах

    Давненько (с 16 февраля) не писал о лыжах, хотя каждую неделю катался. Первый раз - на Гремячий и назад, с разведкой нового пути к маленькому…

  • Воскресная прогулка в сторону Гремячего

    Не было особенных планов "доехать во что бы то ни стало", хотел просто посмотреть "что вообще творится"? после обильных снегопадов в пятницу-субботу.…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 9 comments