Проблемы с переводом координат

#c# #coordinates #transform

#c# #координаты #преобразование

Вопрос:

Мне передали csv-файл, содержащий ряд координат, из которых следует рисовать линии поверх растровой сетки; Я могу получить значения и преобразовать их в целые числа для функции DrawLine и т. Д., Просто отлично.

Проблема в том, что эти координаты в основном представляют собой проценты; x:0.5 и y:0.5 представляют собой мертвую точку (равную 50% от X и 50% от Y) и x:1.0/y:1.0 будет находиться в правом верхнем углу независимо от абсолютных размеров того, на что наносится изображение (в данном случае растровое изображение размером 1000×1500). Кроме того, координаты экрана / окна начинаются в верхнем левом углу, что не влияет на ось x, но ось y должна быть каким-то образом инвертирована.

Итак, что мне нужно сделать с координатами, чтобы они отображались правильно? Честно говоря, у меня ось X работает нормально, а проблемы возникают из-за оси Y.

(Окно, содержащее растровое изображение, имеет размер 1600×1600, FWIW.)

Комментарии:

1. Как далеко вы продвинулись и с какими проблемами столкнулись?

2. Вы указываете, что вам нужно сделать: 1. Масштабируйте x и y до нужного вам «окна просмотра». 2. Инвертируйте координату Y, 3. Переведите начало вашего ‘vierport’

Ответ №1:

Ну, наивный способ — просто вычислить один ближайший пиксель, т. е. round(WIDTH*x)

Но в целом это плохо, потому что некоторые пиксели будут оставлены пустыми, некоторые будут отображаться несколько раз.

Что бы я сделал, так это рассчитал процент покрытия для каждой точки — т. Е. Точка может покрывать 75% одного пикселя и 25% его соседа, а затем соответствующим образом заполнить цвет пикселя.

Ответ №2:

Без более подробной информации о том, что не так, я предположу и скажу, что вы вычисляете свое значение Y вверх-вниз. Попробуйте это так:

 round(HEIGHT*(1.0-y))
  

Затем дайте нам более подробную информацию о том, с чем у вас возникли проблемы.

Комментарии:

1. Я вообще не вычисляю это, оно поступает прямо из файла. Я использую StreamReader, чтобы извлечь его, выполнить замену регулярного выражения, чтобы получить необработанное число, затем использовать int.Parse и передать его функции DrawLine. Проблема в том, что, как я уже говорил, компьютер просто не понимает этот формат, координаты Windows начинаются в верхнем левом углу, а не в нижнем правом, ЭТО моя проблема.

2. Если вы не можете понять, как то, что я написал, инвертирует значение y, я не уверен, что смогу вам помочь.