PDA

Просмотр полной версии : Перевод координат мышы в изометрию


vitlance
12.07.2008, 02:02
3 часа бьюсь неполучается... есть изметрическая сетка, угол 30... так вот нужно перевести кооррдинаты мышы в эту изомтрию.... Примерно вот так:

iNils
12.07.2008, 03:56
function decartToIzo (x:Number, y:Number) {
var i:Number = x / 4 + y / 2;
var j:Number = x / 4 - y / 2;
return {x:i, y:j};
}

vitlance
12.07.2008, 04:08
function decartToIzo (x:Number, y:Number) {
var i:Number = x / 4 + y / 2;
var j:Number = x / 4 - y / 2;
return {x:i, y:j};
}

О! Как всегда спасибо тебе огромное! А как ещё определить на что нужно делить , если угол изменится например скажем на 15 или 45, какая закономерность, от чего зависят делители?

Alex_beginner
12.07.2008, 10:09
Здравствуйте vitlance!

Не совсем понятна задача. Если Вы имели ввиду трансформацию координатной системы это одно, а если Вы имели ввиду перевод координат декартовой системы в полярную это другое. Уточните пожалуйста.

vitlance
12.07.2008, 11:40
Я имел ввиду перевод из декартовой в изометричесую

iNils
12.07.2008, 13:14
Не думаю, что брать углы за основу хорошая идея. Ведь на самом деле угол на рисунке в первом посте не равен 60 градусам. Тангенс 60 равен корню из трех, это примерно 1.732, а у вас там соотношение 2 к 1, то есть тангенс угла имеет значение 2, значит сам угол примерно равен 63.434 градусам.
Поэтому за основу лучше брать соотношение длины к высоте, то есть ratio. Получаем
function decartToIzo (x:Number, y:Number, ratio:Number) {
var i:Number = (x * ratio + y) / 2;
var j:Number = (x * ratio - y) / 2;
return {x:i, y:j};
}
Для рисунка ratio = 2, для угла в 45 градусов ratio = 1

Alex_beginner
12.07.2008, 17:00
Уважаемый vitlance!

Насколько я понял Вы хотите по событию клика мыши произвести пересчет координат точки клика из декартовой системы координат в координатную систему изосетки. Если это так, то такой пересчет Вы сможете получить, использовав мою эксклюзивную функцию (см.вложение).

Для пользования представленным алгоритмом Вам понадобятся декартовы координаты 3 точек ячейки:

1 т- начало координат (см.Ваш рисунок) - pt_1 (имена аргументов функции в программе);
2 т-верняя точка (где y максимален, x=0) - pt_2;
3 т-нижняя точка (где x максимален, y=0) - pt_3;

Проверить алгоритм довольно сложно, но можно использовать ключевые моменты:

1. По всей линии оси X y должен быть близок или равен 0;
2. По всей линии оси Y x должен быть близок или равен 0;

Используйте эти критерии для определения работоспособности функции.

Теперь на счет угла. Если Вы не хотите использовать конкретные декартовы координаты точек в качестве исходных данных, а хотите использовать угол поворота (кстати такая изометрическая система повернута в двух направления - вокруг оси X и вокруг оси Y), то для расчета внутренних коэффициентов k1 и k2 Вы должны использовать запись вида y=tg(alpha)*x+b. Я думаю переделать для угла алгоритм не составит труда.

vitlance
12.07.2008, 23:49
Всё разобрался.... иНилс и Алекс большое спасибо!