April 27th, 2021

QuatCore

Алг. ближней дистанции, поиск "центральных" точек

Если помните, мишень ближней дистанции у нас трёхмерная: 6 уголковых отражателей стоят в одной плоскости, а ещё два, что по центру - вынесены вперёд:
IMG20201021153945.jpg
(см. макет: да будет свет)

поэтому, в зависимости от того, с какой стороны на неё смотришь, центральные точки могут очень хорошо гулять во все стороны:


Основная логика пока такова: у нас ракурс согласно ТЗ не может составить более 30°, и центральная точка всё-таки ограничена в своём перемещении. По последним данным, она вынесена вперёд на 6 см (вообще данная мишень должна иметь глубину не более 9,5 см, но уголковые отражатели тоже некоторую глубину имеют, особенно в своих оправках), поэтому при повороте на 30° может сместиться на 3,5 см, тогда как 3 уголка, лежащие на плоскости, отстоят каждый на 5,5 см.

Поэтому просто ищем точку, расстояние которой до "центральной позиции" (где точка стоит при взгляде под прямым углом) минимально

"Центральные позиции" можно сколько-нибудь точно поместить на отрезок, соединяющий наиболее отдалённые точки, его мы уже находили. Если назвать эти точки P6 и P7, то координаты "центральных позиций" выйдут:

0,7914P6 + 0,2086P7 и
0,2086P6 + 0,7914P7.

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

Впрочем, компьютерное моделирование показало, что всё не так просто, и на углах вблизи 30° бывают сбои. Вот тут ещё всё правильно:


(с нумерацией просто беда. Здесь точкам даны те номера, что в техническом задании на мишень. Вот чья-то левая пятка решила дать такую нумерацию - теперь будь добр используй. Вынесенные вперёд точки имеют номера 1 и 2. Затем перечисляются точки слева, а затем точки справа)

А здесь, буквально кадром позже:


Чудеса, да и только! Поначалу я грешил на перспективу, из-за которой так легко делить отрезки на части не получается, поскольку масштаб плавно меняется.

Collapse )

на этот этап требуется аж 30 слов кода, или 60 байт. Всего "алгоритм ближней дистанции" пока что занимает 81 слово кода, или 162 байта. И кто-то после этого скажет, что ассемблер - не выразительный, очень громоздкий язык!?

Осталось это дело проверить, а потом ещё один кусочек - "случай Берегового".
QuatCore

Тестирование поиска "центральных" точек

У меня, конечно, ещё "обнаружение" ждёт своего часа, но сейчас уже словил азарт по написанию алгоритма ближней дистанции. Так что уж помучаю его.

В очередной раз QuatCoreImmTable доставила хлопот - чуть-чуть поменялось, значений стало больше, и CANNOT FIND FIT. Поэтому пока что заменил на QuatCoreImmROM - там эта таблица просто как блок памяти объявлена. Вот тогда всё моментально отсинтезировалось в 511 ЛЭ - это "голое ядро" без видеопроцессора и прочей периферии.

Ну и запускаем симуляцию.


Collapse )

Пока всё идёт правильно. Продолжение следует...