двух отражений
Nov. 8th, 2025 09:35 pm
На этой картинке хорошо объясняется, мне кажется, то, что мне всегда почему-то было трудно интуитивно уловить: что любое вращение в плоскости это композиция (сочетание) двух зеркальных отражений от двух осей. Конкретно, на рисунке есть синие прямые a и b, между ними угол θ. Все точки желтого треугольника ABC сначала зеркально отражаются вокруг прямой a, получается треугольник A'B'C', и он затем отражается вокруг b, получается A"B"C".
Видим, что итог такой, как если бы мы взяли ABC и повернули его вокруг точки P (где встречаются наши оси) на угол 2θ. Почему так? Во-первых, расстояние любой точки до P от зеркальных отражений не меняется: видим, что например A, A', A" все лежат на одной окружности вокруг P. Далее, равенство углов отражения приводит к тому, что полный угол вращения между A и A" как раз дважды угол, заключенный между прямыми, т.е. θ. Эти равные углы обозначены на диаграмме.
Это только один из нескольких случаев - если бы мы начали с точки A', то сначала отразились бы в A, а потом в другую точку, но тоже на угол 2θ от той, что начали - и там углы частично вычитаются, а не складываются. На рисунке самый наглядный пример, но и по всем остальным легко убедиться геометрически. Или выписать координатные формулы вращения и отражений - но мне важно было именно интутивное геометрическое понимание.
Это мне напомнило, как во время работы в Гугле я очень много раз давал следующую задачу на интервью кандидатам: написать код, который принимает числовой квадратный массив размером NxN, и "поворачивает" его на 90 градусов по часовой стрелке - т.е. меняет все числа внутри так, как если бы мы его повернули (специально оговаривается, что нельзя взять новый пустой массив и в него все правильно скопировать, нужно менять прямо в существующем).
Я давал эту задачу на предварительном ("телефонном", хотя их много лет как перестали делать по телефону) интервью, где задания даются попроще, и упор на то, чтобы проверить, что кандидат умеет грамотно писать код, находить в нем ошибки итд. В этом случае самое напрашивающееся решение - это понять, что при повороте члены массива переходят в друг друга по циклу четверками. Можно сделать два вложенных цикла по 1/4 массива, для каждого i,j аккуратно записать индексы тех 4 ячеек массива, которые меняются местами по циклу, и поменять их местами. Сложность в том, чтобы не запутаться в индексах, правильно разобраться с четными/нечетными по размеру массивами, правильно сделать цикл по 1/4 массива, который каждую четверку "задевает" ровно один раз.
Я давал эту задачу наверное раз 80, очень много. Чаще кандидаты успешно решали ее, хорошие минут за 10-15, некоторые за все время интервью (45 минут), некоторые не справлялись вообще. И только один раз из всех этих кандидат подумал секунд 20, поднял взгляд на меня и сказал: вращение это композиция двух зеркальных отражений. И написал два простейших (по сравнению с циклами "четверок") цикла, отражающие массив вначале по горизонтальной середине, потом по диагонали. Минут за 5, кажется.