nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

Тестируем "случай Берегового" (окончание)

Я мельком просмотрел "осциллограмму" дальше, и увидел, что процедура SwapPoints вызывается ровно 6 раз, как и должно быть, а потом мы входим в бесконечный цикл, которым пока что оканчивается выполнение программы. Сразу глянем на дамп памяти по окончании работы:


Вот тот же дамп, только в десятичном виде, со знаком:


Нда... После нажатия на ОК квартус совсем закрылся. Я снова его открыл, снова попытался выбрать представление, та же ошибка. Ладно, тогда "ручками" пересчитаем, не привыкать.

Только начал отмечать точки на картинке по этому списку, вижу - что-то не то. Сравнил с дампом по предыдущему этапу:


Все обмены должны были проходить только по верхней строке, именно там лежат наши точки: Fx0, Fy0, Fx1, Fy1, Fx2, Fy2 и так далее. А строкой ниже - уже элементы матрицы, с помощью которой мы будем считать матрицу аффинного преобразования.

Что ж, где-то ошибся...


Как оказалось, В САМОМ НАЧАЛЕ всех этих перестановок:

;i=0, j=6, k=0, но могли бы k поставить какой хотим.
;Swap меняет (X,i)  с (Z,j) в смысле нумерация i от нулевой точки, j - от первой.
	i	6
	[SP]	Call(SwapPoints)	;поменяли 6 и 7


Комментарий, что j=6 - неверен! Стал неверен после того, как мы исправили ошибку в коде выше, для чего назначили j=7. Вот поэтому мы и "выскочили" за пределы массива.

Ладно, заменим строку "i 6" на "ijk 0x00C6", тем самым мы выставляем i=j=6. Перекомпилим - и попробуем ещё разок.



Так гораздо лучше! За пределы своих 8 точек мы не лезем, и переставляем их строго "попарно", без хитрых перестановочных циклов. А именно, у нас получилось:
0 <-> 5
1 <-> 7
2 <-> 3
4 <-> 6


Изобразим, наконец, как это выглядит на изображении.

Координаты в пикселях были "отцентрированы", чтоб (0;0) оказывалась в центре экрана, и потом координаты домножены на 64, чтобы весь экран соответствовал диапазону -32768..+32767. Чтобы из этих значений вернуться к координатам на картинке, нужно проделать обратные операции: поделить на 64, прибавить 512. Почему-то я в этот раз не поменял знак оси Y, чтобы была правая система координат. Нехорошо это! Координаты мишеней "в метрах" все заданы в правой системе координат, и если теперь "в лоб" посчитать матрицу аффинного преобразования, туда попадёт "зеркальное отражение", иначе никак.

Так что надо будет ещё на правильных координатах потренироваться, а пока посмотрим, что здесь:




Своеобразная получилась нумерация... Слева все чётные, справа все нечётные. Центральные точки - самые последние, чтобы "не путались под ногами" когда будем считать матрицу аффинного преобразования.

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

  • Тестируем atan1 на QuatCore

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

  • Формулы приведения, что б их... (и atan на ТРЁХ умножениях)

    Формулу арктангенса на 4 умножениях ещё немножко оптимизировал с помощью алгоритма Ремеза: Ошибка уменьшилась с 4,9 до 4,65 угловой секунды, и…

  • Алгоритм Ремеза в экселе

    Вот и до него руки дошли, причина станет ясна в следующем посте. Изучать чужие библиотеки было лениво (в том же BOOSTе сам чёрт ногу сломит), писать…

  • atan на ЧЕТЫРЁХ умножениях

    Мишка такой человек — ему обязательно надо, чтоб от всего была польза. Когда у него бывают лишние деньги, он идёт в магазин и покупает какую-нибудь…

  • Ай да Пафнутий Львович!

    Решил ещё немного поковыряться со своим арктангенсом. Хотел применить алгоритм Ремеза, но начал с узлов Чебышёва. И для начала со своего "линейного…

  • atan(y/x) на двух умножениях!

    Чего-то никак меня не отпустит эта тема, всё кажется, что есть очень простой и эффективный метод, надо только его найти! Сейчас вот такое…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments