Вращение бинарного изображения вокруг своей оси на произвольный угол. Освоение предметной области ВИСУ на примере практической задачи работы с визуальными сценами, страница 7

з) Задать адрес 8500h в поле “Снять кадр” и нажать соответствующую кнопку – это основная программа, которая рассчитывает новые координаты точки и соответствующую им область в области памяти для фрейма;

е) Задать адрес 8490h в поле “Загрузить кадр” и нажать соответствующую кнопку – после этого начальная точка и полученная в результате преобразований выведется на экран.

8.  Результаты испытаний и анализ результатов

В качестве испытаний предполагалось взять несколько точек в любой четверти и передвинуть их на малые углы в пределах 3 градусов, на четные углы – 30,60,90 градусов, и на нечетные – 45 градусов и в другую четверть. Расчеты новых координат производились верно, с максимальной погрешностью в 1-2 градуса. Например, точка в первой четверти с координатами (60;1) при повороте на 45 градусов перемещалась в координату (42;43), когда по теоретическим расчетам она должна была переместиться в координату (45;45). Точка во второй четверти с координатами (30;20) при повороте на 110 градусов перемещалась на координату (11;33) в третьей четверти, когда по теоретическим расчетам она должна была переместиться в координату (10:35), и т.д.

Подробнее результаты испытаний можно посмотреть в таблице 1.

Как видно из таблицы, погрешность вычислений крайне мала.

Пример расчета теоретических координат новой точки, получившейся из (30;20):

new_x=cos(30)*30/cos(30)=20

new_y=sin(30)*20/cos(30)=30

Таблица 1. Результаты испытаний вычисления координат новой точки

x

y

alpha

new_x

new_y

теор. Х

теор. У

chetvert

60

1

2

58

5

58

3

1

60

1

0

60

1

60

1

1

60

1

25

49

9

50

10

1

60

1

45

42

43

45

45

1

60

1

90

59

1

60

1

2

60

1

10

57

16

55

15

1

30

20

30

18

32

20

30

1

30

20

120

18

32

20

30

2

30

20

210

14

31

20

30

3

1

1

170

1

1

1

1

3

30

1

30

25

13

25

15

1

Однако, при перерасчете координаты в область памяти выводимые на экран точки оказывалась отличными от рассчитанных в программе (рис. 8).

а)                                                              б)

Рис. 8 Результат поворота точки, лежащей на оси х с координатами (60;1) на 45 градусов.(а – до коррекции, б - после)

Как уже было сказано выше, точка, лежащая на оси 0Х, была повернута на 45 градусов и переместилась в координату (42;43). Рассчитаем для нее место в памяти по формуле 2:

А теперь посмотрим, как данный расчет производится в программе:

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