skoder
@skoder
web программист

Как реализовать 2D вращение полигона на Яндекс.Картах?

Добрый день. Есть полигон на 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, и сжаты как-то по осям (к примеру если создать очень большой круг на карте то он тоже может быть слегка приплюснут ближе к полюсам).
Но я вращаю сравнительно маленький полигон вдали от полюсов.
Подскажите, что я делаю не так.
  • Вопрос задан
  • 2891 просмотр
Пригласить эксперта
Ответы на вопрос 1
clamaw
@clamaw
Вращайте не в географических координатах, а в пиксельных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы