Добрый день. Есть полигон на Yandex карте. Он представлен набором точек (долгота и ширина) на карте мира. Хотел бы научится его поворачивать на n градусов.
Вот, как это советуют делать для обычной координатной плоскости
self.rotateOnePoint = function ( d,center,degree){
var tx = 0, fi = degree;
d[0] = d[0] - center[0];
d[1] = d[1] - center[1];
tx = d[0];
d[0] = tx * Math.cos(fi) - d[1] * Math.sin(fi);
d[1] = tx * Math.sin(fi) + d[1] * Math.cos(fi);
d[0] = d[0] + center[0];
d[1] = d[1] + center[1];
return [d[0],d[1]];
};
В d я подаю по очереди все точки полигона. В center координаты центра карты. в degree результат работы такой функции
var findAngle = function (p0,p1,c) {
return Math.atan2(p1[1]-c[1], p1[0]-c[0]);
}
где p0 - начальное положение мыши на координатной плоскости мира,
p1 - текущее положение мыши на координатной плоскости мира,
c - центр карты
В итоге полигон вращается, но с искажениями при повороте. Его вершины описывают что-то вроде эллипса а не круга.
Вероятно это связано с тем, что долгота и широта не совсем x и y, и сжаты как-то по осям (к примеру если создать очень большой круг на карте то он тоже может быть слегка приплюснут ближе к полюсам).
Но я вращаю сравнительно маленький полигон вдали от полюсов.
Подскажите, что я делаю не так.