All streams
Search
Write a publication
Pull to refresh
3
0
Владимир @Algoritmist

Инженер-математик

Send message
Здесь нужен собеседник, который подскажет. Да, это не шутка. u — не одно число, а массив (u++ — гуляет по нему).
Я знаю только одного человека, который сделал это задание сразу. (И это был не я)
Нет, не потерял. Указатель может указывать на конец строки. Тогда будет пустая строка.
Найти автора я не смог, но похоже это реальный код. Что-то в виде таблицы рисовалось.
Да, я так первый раз и написал, но u — не одно число, а массив. (u++ — гуляет по нему)
Лучше С задавать не в функции P.
На то он и тест на уровень знания. Он не дает ответа «ДА» или «НЕТ». Тут много исходов. И обычно тесты не является основанием приема на работу или отказа, а просто тема для разговора.
Согласен, это кажется бредом, но загляните в сишный код какой-либо старой библиотеки. Вы измените свою точку зрения. Среди железячников такого кода масса. Руки бы им оторвать за такой код.
Извините, в матрице A ошибка:
a1 a2
0 1
и ответ:
a1 = cos(alpha)
a2 = sin(alpha)
b1 = -sin(alpha) / cos(alpha) = -tg(alpha)
b2 = 1 / cos(alpha)

Еще такой подход не работает на углах поворота близких к 90 градусам. Можно работать от -45 до 45, а иначе работать с модификацией, которая как бы поворачивающей заранее изображение на 90 градусов (меняет х и у местами).
Здесь синус и косинус угла надо вычислять заранее только один раз на кадр. Как вариант можно таблицу записать и интерполировать. Но зачем это делать, если это уже сделано в CORDIC?
При рекуррентном вычислении надо быть осторожным. Ошибка копиться будет. Можно обратно в 0 градусов не вернуться.
Есть. Для простоты можно считать, что числа только целочисленные (с фиксированной точностью).
Поворот на ПЛИС можно сделать двумя последовательными косыми сдвигами. Отдельно по строкам, отдельно по столбцам. Тогда с памятью идет поточная работа. В результате выходит последовательное применение двух одномерных фильтров. Справедливости ради, стоит сказать, что это не совсем «косой сдвиг», но суть близкая. Пусть сначала идет обработка по строкам (матрица A), а потом по столбцам (матрица B). Матрица поворота (М) раскладывается так (для аффинных преобразований такой прием проходит):
B * A = M
A вида (косой горизонтальный сдвиг)
a1 a2
1 0
B вида (косой вертикальный сдвиг)
1 0
b1 b2
т.е.
x* = a1 x + a2 y
y* = b1 x* + b2 y (стоит обратить внимание, что «x» тут новое)
Осталось найти коэффициенты (a1, a2, b1, b2) этих матриц. Выходит система уравнений. Ответ:
a1 = cos(alpha)
a2 = sin(alpha)
b1 = cos(alpha) / sin(alpha) = ctg(alpha)
b2 = -1 / sin(alpha)
2

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity