QuatCore: более универсальный, чем мне казалось

Jul 08, 2019 01:35

Не так давно излагал возможные инструкции своего будущего процессора QuatCore (Quaternion Core). Большинство достаточно стандартные - прочитать, записать, прибавить, вычесть, умножить, условные и безусловные переходы, к этому добавляется автоматический инкремент/декремент и косвенная адресация с регистрами X, Y, Z, SP как "базовые" и i,j,k как "индексные".

Единственное, что в нём выявляло "заточенность" на работу с кватернионами - это довольно странный тип адресации [Y + i^j], и флаг PM (Plus-Minus), который определяется из регистров i,j по таблице:

+ - - -
+ + + -
+ - + +
+ + - +

и ещё один регистр Inv, который заставляет транспонировать эту табличку.

Это было нужно, чтобы легко и непринуждённо перемножить два кватерниона с помощью двух вложенных циклов. Но оказывается, эти режимы могут помочь и в других делах!


По сути, мы получаем возможность "на лету" строить такую матрицу:



Умножая её на вектор 4х1, приходим к умножению кватернионов.

Если оставив лишь 2 компонента, делая циклы от 0 до 1, получим такую матрицу:


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

Делая циклы от 1 до 3, получаем следующую матрицу:


Положив λ0=0, получаем векторное произведение (ещё надо будет её транспонировать, выставив Inv=1), а если λ0=1, а остальные компоненты малы - это будет матрица малого поворота.

Так что выделить под эти режимы 2 адреса из доступных 256 - очень даже выгодное вложение :)

кватернионы-это просто (том 1), математика, ПЛИС, работа

Previous post Next post
Up