September 6th, 2021

QuatCore

Испытываем новую команду "S"

В прошлый раз мы ввели новую команду, "выдать флаг знака на шину данных", сокращённо "S". Подправили компилятор, запустили старую программу - по крайней мере ничего не поломали.

Теперь надо попробовать ею воспользоваться, и для начала я хочу переписать кусочек кода в процедуре FindRoll (найти крен). Там мы нашли синус и косинус угла крена, сокращённо si и co, и хотим превратить их в кватернион поворота по крену, по сути в синус и косинус половинного угла, не прибегая к хитрючей тригонометрии. К счастью, соответствующий "рецепт" уже был у нас в ликбезе:

Если co>0, то


в противном случае



и затем кватернион нормируется. Длина ненормированного кватерниона будет от 0,707 (один на корень из двух) до 1, так что итераций для нормировки нужно не шибко много, хватит 4..5, чтобы выйти на полную точность, доступную в 16 битах.

Значение co у нас лежало в [Z], si в [Z+1], компоненты кватерниона мы хотим запихать в [X] и [X+1], для чего применяли такой вот упоротый код:

	;i=j=k=Inv=0				
	ABS	[Z+k]			
	DIV2	Acc
	ADD	16384
	;флаг S (sign) сейчас показывает знак co, что для нас очень полезно
	JGE	@@skip
	i	1	;выходит i=S
@@skip:	X	DA_Quat0
	[X+i]	Acc
	j	1
	DIV2	[Z+1]
	[X+i^j]	Acc	;по сути, Y+(~S)


Нужно его немножко упростить!

Collapse )



Уже лучше. Первый раз кватернион 32767 + 0i, т.е кватернион нулевого поворота. Второй раз -1+32767i, это практически поворот на 180 градусов, как и было в этом "сценарии".

Ещё показания дальности изменились после добавления одной итерации в NormSiCo, теперь "мантисса" 0x953A = 38202, а дальность 38202/32768 * 29-1 = 298,45 метров. Логично: у нас до этого нормировка до конца не доходила, поэтому масштаб выходил меньше и соответствовал большей дальности. Бывает и так: я координаты точек когда-то "сочинял", пытаясь учесть все проблемы, которые могут возникнуть с фотоприёмной матрицей: неравномерность чувствительности, "мёртвые зоны" и пр., может при правильных вычислениях и должно было получиться так...

В следующий раз громко думаем над знаками для FMPM, после чего тестируем арктангенс.