2013-04-12 3 views
0

У меня есть стрелка, представленная как 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-в-ходу указывает), физическое расстояние между градусами широты и долготы не равны?

ответ

4

Ничего плохого в вашей математике - шкалы на координатах координат X и Y на вашем графике не совпадают :)

+0

А! Я только что скорректировал его, так что это квадратное изображение, и все получилось правильно! Спасибо! Есть ли способ сделать это, чтобы я мог иметь прямоугольную стрелку? – Seth

+0

Я не уверен, что вы имеете в виду ... что такое прямоугольная стрелка? –

+0

Дело в том, что масштаб (единицы на пиксель, здесь) должен быть одинаковым на осях X и Y, чтобы изображения не искажались. Боюсь, я не знаю, как сказать вашей графической программе. –