IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Зеркальное отражение матриц, (диагонали и оси симметрии)
TBVlad
сообщение 22.01.2006 17:51
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской
Реальное имя: Владимир

Репутация: -  0  +


Хотелось бы поточнее разобраться в алгоритме зеркального переворота матриц относительно побочной диагонали и вертикальной оси симметрии.
Если уже разбиралось, ткните носом, плиз...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
klem4
сообщение 22.01.2006 18:19
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Главная.
Побочная по аналогии


const
n = 4;
type
TMx = array [1..n,1..n] of integer;

// ...

procedure Mirror(var mx : TMx);
var
i,j : byte;
T : integer;
begin
for i := 2 to n do
for j := 1 to i - 1 do begin
T := mx[i,j];
mx[i,j] := mx[j,i];
mx[j,i] := T;
end;
end;


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TBVlad
сообщение 22.01.2006 20:42
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской
Реальное имя: Владимир

Репутация: -  0  +


То есть, то чтобы повернуть матрицу вокруг побочной диагонали, нужно обменом через временную переменную переместить все элементы, кроме тех, что (i+j-1=N)?

----
Я так понял, что вертикальная ось симметрии (R как фиксированная срединная точка в ряду j) - это вот что:
If (N mod 2)=0 then
R:=(j div 2)
else
R:=((j div 2)+1);

И, таким образом, сама ось - это arr[i,r]. Если это правильно, то как производится поворот матрицы вокруг неё?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.01.2006 21:05
Сообщение #4


Гость






Цитата(TBVlad @ 22.01.2006 19:42)
Я так понял, что вертикальная ось симметрии (R как фиксированная срединная точка в ряду j) - это вот что:
If (N mod 2)=0 then R:=(j div 2)
else R:=((j div 2)+1);

Все проще гораздо. Чтобы "отразить" матрицу относительно оси вертикальной симметрии, делаем так:
  for i := 1 to n do begin { по строкам }
for j := 1 to n div 2 do begin { по столбцам }
T := arr[i, j];
arr[i, j] := arr[i, n - j + 1];
arr[i, n - j + 1] := T;
end;
end;
 К началу страницы 
+ Ответить 
Дож
сообщение 25.01.2006 21:54
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 179
Пол: Мужской

Репутация: -  1  +


Цитата

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

А что такое отражение матрицы относительно диагонали? Что такое поворот относительно главной диагонали понятно, а вот чем оно отличается от отражения по побочной диагонали?


--------------------
Доброго времени суток.
:nnn:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.07.2025 10:06
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"