![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Здесь f=actan(y/x), R=sqrt(x2+y2) и обратно - x=R*sin(f), y=R*cos(f).
Геометрически комплексное число может быть представлено как вектор на комплексной плоскости, что аналогично представлению вектора в обычных декартовых кооржинатах -
Поставим следущую задачу -
1) у нас есть вектор (х1,у1), он повернулся вокруг начала координат на угол f2. Нужно найти его новые координаты (x',y')
И обратную задачу -
2) у нас есть вектор (x1,y1) и он повернулся относительно начала координат так, что его новые координаты cтали равны (x',y') - нужно найти угол поворота f2.
Решенение задачи (1) в общем-то очевидно, она просто для иллюстрации того, как представить вектор в виде комплексного числа.)
Перемножение комплексных чисел в показательной форме таково -
z' = z1*z2 = R1*exp(i*f1)*R1*exp(i*f1) = R1*R2*exp(i(f1+f2))
- и из него видно, что результирующий вектор будет повернут на угол (f1+f2), а его длина будет равной R1*R2.
то есть повороту вектора z = x+i*y = R1*exp(i*f1) на угол f2 соответствует его умножение как комплексного числа (в показательной записи) на комплексное число z2=exp(i*f2) (так как длина вектора не меняется, то R2=1)
С помощью этого знания решим задачу (1) -
а) переведем вектор (x1,y1) в его показательную запись -
z1 = R1*exp(i*f1), где R1 = sqrt(x12+y12), f1=arctan(y1/x1)
б) умножим его на z2=exp(i*f2) -
z' = R1*exp(i*(f1+f2))
в) представим результат в алгебраическом виде -
z' = R1*sin(f1+f2)+i*R1*cos(f1+f2) = x'+i*y'
г) откуда сразу получаются его новые координаты -
x' = R1*sin(f1+f2);
y' = R1*cos(f1+f2)
Теперь решим задачу (2), чуть посложнее. Она обратна задаче (1) - там мы поворачивали вектор на известный угол и нужно было узнать результат - здесь конечный результат известен, но надо найти угол.
В первом случае результат z' как К.Ч. был равен перемножению исходного вектора z1 как К.Ч. на угол поворота z2 как К.Ч. -
zR=z1*z2;
Теперь нам надо найти не z', а z2, поэтому нам надо поделить обе части этого равенства на z1 -
z'/z1=z2.
(Таким образом, поворот в одну сторону соответствует умножению комплексных чисел, в лругую - деление комплексных чисел)
Записываем это равенство в показательном виде (учитывая, что длина вектора не меняется, т.е. R'=R1)
z'/z1 = exp(i*f')/exp(i*f1) = exp(i*(f'-f1)) = exp(i*f2)
Теперь представляем результат в тригонометрическом виде -
z'/z1 = exp(i*f2) = sin(f2)+i*cos(f2)
А теперь в алгебраическом виде -
z'/z1 = (x'+i*y')/(x1+i*y1)
Результат деления по известной формуле преобразуется в комплексное число в алгебраическом виде -
(x'+i*y')/(x1+i*y1) = (x1*x'+y1*y')/(x12+y12)+i*(x1*y'-x'*y1)/(x12+y12) = sin(f2)+i*cos(f2)
откуда сразу можно найти f_2, приравняв реальную и мнимую части -
sin(f2) = (x1*x'+y1*y')/(x12+y12)
cos(f2) = (x1*y'-x'*y1)/(x12+y12)
откуда f_2 можно найти аж тремя путями -
1) f2 = arcsin((x1*x'+y1*y')/(x12+y12))
2) f2 = arccos((x1*y'-x'*y1)/(x12+y12))
3) f2 = arctan((x1*x'+y1*y')/(x1*y'-x'*y1))
Какой из этих путей лучше, кстати?