У меня есть стрелка, представленная как X, Y, что я хочу повернуть на 25 градусов. Моя стрелка вращается, но она больше не выглядит хорошо. Углы больше не 90 градусов, где они должны быть. Точки:2D Вращение координат - искаженное изображение
-85.0,0.0
-25.0,50.0
-25.0,15.0
85.0,15.0
85.0,-15.0
-25.0,-15.0
-25.0,-50.0
-85.0,0.0
Это делается изображение that looks like this.
Вот мой (PHP) код для поворота точки:
$pts = array(
array(-85, 0),
array(-25, 50),
array(-25, 15),
array(85, 15),
array(85, -15),
array(-25, -15),
array(-25, -50),
array(-85, 0),
);
$rotate = deg2rad(25);
$sin = sin($rotate);
$cos = cos($rotate);
foreach($pts as $xy) {
list($x, $y) = $xy;
// Rotate
$x2 = ($x * $cos) - ($y * $sin);
$y2 = ($x * $sin) + ($y * $cos);
printf("%0.3f, %0.3f\n", $x2, $y2);
}
Выход:
-77.036, -35.923
-43.789, 34.750
-28.997, 3.029
70.697, 49.517
83.375, 22.328
-16.318, -24.160
-1.527, -55.881
-77.036, -35.923
Получившееся изображение no longer looks good.
Что я делаю неправильно в своей математике? Я бы хотел, чтобы он все еще имел 90-градусные углы, где он должен и т. Д.
Спасибо! Seth
EDIT: Остальное упражнение состоит в том, что я переводю точки в координаты широты/долготы для отображения в Google Earth. Код перевода:
$x2 = ($x2 * $scale) + $latref;
$y2 = ($y2 * $scale) + $lonref;
Является ли моя «реальная» проблема (как @ Joel-в-ходу указывает), физическое расстояние между градусами широты и долготы не равны?
А! Я только что скорректировал его, так что это квадратное изображение, и все получилось правильно! Спасибо! Есть ли способ сделать это, чтобы я мог иметь прямоугольную стрелку? – Seth
Я не уверен, что вы имеете в виду ... что такое прямоугольная стрелка? –
Дело в том, что масштаб (единицы на пиксель, здесь) должен быть одинаковым на осях X и Y, чтобы изображения не искажались. Боюсь, я не знаю, как сказать вашей графической программе. –