Перевод x,y при масштабировании

Я пытаюсь отобразить координаты x, y, где размер окна составляет 600 пикселей на 600 пикселей. (0,0) будет вверху слева. (300 300) середина окна. (600 600) будет внизу справа. Я пытаюсь перевести широту/долготу в радианах в пиксели, а затем рисую их. Я рассчитываю 1px = ? лат по

`fabs(lborder+rborder)/600`

Я рассчитал lon, взяв верхнюю и нижнюю границы. Затем, когда я хочу найти конкретную позицию для определенной широты или долготы:

lat/(previous # calculated above)

Проблема в том, что мое окно изменяется от 0,0 до 600 600, как описано выше, и я могу получить отрицательные баллы, и я не знаю, как их перемещать, и я не знаю, как центрировать их вокруг 300 300, когда границы меняются.

На данный момент, пока я делаю центр (0,0) с точки зрения (x, y), а не пикселей, точки отображаются там, где они должны идти. Например, если x равен от -1 до 1, а y равен от -3 до 3, (300px,300px) будет (0,0).

Если я изменю границы, чтобы сказать, что x-0,5 на 1 и y-3 на 0,5, (300px,300px) будет (0,25, 1,25). Однако расчеты выше с этими цифрами.

1.5/600 = .0025 ----> 1px = .0025lat.
3.5/600 = .0058 ----> 1px = .0058lon.

Затем взяв среднюю точку (.25,1.25):

.25/.0025 = 100px
1.25/.0058 = 215px

что явно не 300 пикселей, 300 пикселей, несмотря на то, что он находится в центре графика.

Любые идеи будут чрезвычайно полезны.


person mchoy25    schedule 11.08.2015    source источник
comment
Вы должны расширить свой вопрос. Может быть, поможет пример изображения с тем, что у вас есть и что вы хотите.   -  person jonnybazookatone    schedule 12.08.2015
comment
Я рекомендую сместить широту/долготу с [-PI/2;PI/2] на [0;PI], чтобы соответствовать только положительным значениям. Таким образом, возможно простое преобразование в координаты окна.   -  person MABVT    schedule 12.08.2015
comment
@MABVT Я не уверен, что понимаю, как это сделать. Можете ли вы привести пример?   -  person mchoy25    schedule 12.08.2015
comment
У вас есть значение в радианах, которое равно интервалу [-PI,PI] (-180°,180°) для долготы и [-PI/2,PI/2] (-90°,90°) для широты. Сдвиньте долготу на (0,360), т.е. [0,2PI], и широту на (0,180) или [0,PI], применив соответствующую формулу (я оставлю это вам как пищу для размышлений). Затем вы можете сопоставить их с координатами экрана [0,600]   -  person MABVT    schedule 12.08.2015
comment
Если мой ответ был полезен, пожалуйста, отметьте его как ответ.   -  person vincent    schedule 02.10.2015


Ответы (1)


Если вы хотели бы подогнать координаты к центру, то, может быть, что-то вроде этого?

Coord coordsFromCenter(Coord old_coord, float height, float width)
{
    Coord new_center;

    float new_x_center = width/2.0;
    float new_y_center = height/2.0;

    new_center.set_x(old_coord.get_x() - new_x_center);
    new_center.set_y(old_coord.get_y() - new_y_center);

    return new_center;
}
person vincent    schedule 11.08.2015