У меня есть матрица элементов [ n x m ], где центр не может быть на координате (x, y) 0,0:
<?php
$matrix_yx = array(
21 => array(10,11,12),
22 => array(10,11,12),
23 => array(10,11,12),
24 => array(10,11,12)
);
$origin_yx = array(23,11);
?>
Я пытаюсь написать функцию для передачи в качестве ввода
- матрица
- координата поворота, которая будет использоваться в качестве точки опоры
- в конечном итоге вращение в градусах (это может быть только 90, 180 или 270)
Итак, рассматривая представление элементов матрицы (x, y):
y
^
| 10,24 11,24 12,24
| 10,23 >11,23< 12,23
| 10,22 11,22 12,22
| 10,21 11,21 12,21
+-----------------------> x
Мне нужно повернуть его на 90 градусов по часовой стрелке вокруг точки (11,23), в основном получая новую матрицу, подобную этой:
y
^
| 09,24 10,24 11,24 12,24
| 09,23 10,23 >11,23< 12,23
| 09,22 10,22 11,22 12,23
+-------------------------------> x
Я немного смущен, как если бы начало координат (x, y) было бы по координате (0,0), тогда это было бы просто как
(x,y) = (11,23)
перевести 90' вокруг (0) я бы получил
function Rotate($matrix) {
list($x,y) = array($y,-$x);
(x,y) = (23,-11);
}
но тогда что я должен учитывать, если я хочу передать другую опорную координату?
function Rotate($matrix, $pivot_x, $pivot_y) {
//-- (...)
}
В случае, если мне придется транспонировать матрицу 180 или 270 градусов (вместо 90), тогда функция будет вызываться 2 или 3 раза... если, конечно, не будет более разумного подхода (который, я уверен, существует, но - на данный момент - не в моем уме).