Я застрял с кажущейся простой задачей в математике: мне нужно повернуть точки в двумерной декартовой системе координат, т.е. у меня есть точка, заданная (x / y), и угловая гамма, и мне нужно координаты этой точки при вращении гамма ...
пример: если x = 2 и y = 0, а угол поворота составляет 90 °, результирующая точка будет иметь вид x '= 0, y' = -2 (повернут по часовой стрелке)
поэтому я нашел эту формулу в сети (http://en.wikipedia.org/wiki/Rotation_matrix) и реализовал некоторый код для ее проверки:
$x = 1; echo "x: " . $x . "<br>";
$y = 1; echo "y: " . $y . "<br>";
$gamma = 45; echo "gamma: " . $gamma . "<br>";
$sinGamma = sin(deg2rad($gamma));
$cosGamma = cos(deg2rad($gamma));
$x2 = $x*$cosGamma - $y*$sinGamma; echo "x2: " . $x2 . "<br>";
$y2 = $y*$cosGamma + $x*$sinGamma; echo "y2: " . $y2 . "<br>";
хотя это работает просто БОЛЬШОЕ для углов 90/180/270 градусов, все остальное приведет к полному дерьму!
т.е:.
если x = 1 и y = 1 и гамма = 45 °, результирующая точка будет лежать точно на оси x ... хорошо - приведенный выше сценарий выведет:
x: 1
y: 1
gamma: 45
x2: 1.11022302463E-16
y2: 1.41421356237
я что-то не так понял? (школа для меня давно закончилась ^^) как я могу сделать это правильно?