Как правильно преобразовать координаты? Есть функция для преобразования координат мыши в координаты картыexport function canvasCoordinatesToMapCoordinates(
coordinates: ICoordinates,
camera: Camera,
textureSize: number
): ICoordinates {
const coordinateX = Math.floor((coordinates.x + camera.x) / textureSize);
const coordinateY = Math.floor((coordinates.y + camera.y) / textureSize);
return {
x: coordinateX,
y: coordinateY,
};
}
Для значений coordinates = {x: 61, y: 64}
camera = {x: 0, y: 0};
textureSize = 32;
всё высчитывается верно{x: 1, y: 2}
Однако для значенийcoordinates = {x: 106, y: 64}
camera = {x: 0, y: 0};
textureSize = 32;
получаю результат{x: 3, y: 2}
хотя ожидаю{x: 4, y: 2}
Полагаю делается всё это совершенно иначе, однако беглое гугление результатов не дало, ибо с теорией большие проблемы... =(

21 Авг 2019 в 06:04
185 +1
0
Ответы
1

Для преобразования координат в данной функции используется округление в меньшую сторону с помощью метода Math.floor. Это может привести к небольшим погрешностям в результатах, особенно когда значения не кратны размеру текстуры.

Если вы хотите получить более точные результаты, вы можете использовать округление до ближайшего целого числа с помощью метода Math.round:

export function canvasCoordinatesToMapCoordinates(
coordinates: ICoordinates,
camera: Camera,
textureSize: number
): ICoordinates {
const coordinateX = Math.round((coordinates.x + camera.x) / textureSize);
const coordinateY = Math.round((coordinates.y + camera.y) / textureSize);
return {
x: coordinateX,
y: coordinateY,
};
}

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

20 Апр 2024 в 13:24
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир