Угол Z
|
|
TheLost | Дата: Вторник, 05 Апреля 2011, 20:05:25 | Сообщение # 26 |
1 уровень
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 5
Блокировки:
| [DUОS], благодарю. Раз так тогда предложу свою идею поиска угла на примере приведенной выше картинки. Угол между точками с координатами X и Y Atan2(Y(B) - Y(A), X(B) - X(A)) - думаю все знают далее находим с помощью Z юнита - GetUnitFlyHeight(unit) Z точки - GetLocationZ(Location(x,y)) выбираем любую на вкус координату X или Y и благополучно заменяем ее на Z, и мы получаем угол проекции в плоскости XZ или YZ в зависимости от того что меняли ничего сложного, надо просто попробовать и поэксперементировать хорошо проверить можно каждую секунду отображать угол между например юнитом на земле и юнитом в воздухе и подвигать их и будет понятно адекватно это работает или нет=)
Даже если ты самый лучший в мире теоретик, практика тебя нагнет...
|
|
|
|
[DUОS] | Дата: Вторник, 05 Апреля 2011, 20:42:24 | Сообщение # 27 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Стойте! Это же угол между прямой и плоскостью!
|
|
|
|
Dreii | Дата: Вторник, 05 Апреля 2011, 20:48:42 | Сообщение # 28 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| [DUОS], они могут и в одной плоскости быть или я не о том?
|
|
|
|
[DUОS] | Дата: Вторник, 05 Апреля 2011, 20:51:45 | Сообщение # 29 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Dreii, Z в одной плоскости? Оу правда?
|
|
|
|
Dreii | Дата: Вторник, 05 Апреля 2011, 20:52:33 | Сообщение # 30 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| [DUОS], я хз они могут быть и в одной
|
|
|
|
rixt7956 | Дата: Вторник, 05 Апреля 2011, 21:29:29 | Сообщение # 31 |
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
| они могут быть где угодно Добавлено (05-04-2011, 21:29) --------------------------------------------- [DUОS], Так напишешь код?
|
|
|
|
[DUОS] | Дата: Вторник, 05 Апреля 2011, 23:30:58 | Сообщение # 32 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Quote (rixt7956) Так напишешь код? Только формулу б откопать.
|
|
|
|
TheLost | Дата: Среда, 06 Апреля 2011, 03:17:18 | Сообщение # 33 |
1 уровень
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 5
Блокировки:
| Quote (rixt7956) Так напишешь код? Quote (|DUОS|) Только формулу б откопать. Зобаньте меня плиз, что бы я этого не видел... у вас никакого пространсвенного воображения... я же написал вам способ... что бы тебе rixt7956, было понятнее то представь что на картинке точка А1 это точка начала координат, вертикально вверх идет ось Z, налево Х и прямо на тебя идет ось Y... а теперь представь что эта твоя картинка лежит на земле а Y направлен вверх как будто это Z и просто забудем про этот Y теперь просто работай с плоскостью ZX так же как и раньше работал с XY , вся сложность сводится к поиску Z объекта, а угол по моему примеру найдешь так Atan2(Z(B) - Z(A), X(B) - X(A)) - угол получится в радианах а вы ппц какие то формулы ищите, угол между прямой и плоскостью, ужс... было бы не лень наработку бы сделал... Добавлено (06-04-2011, 03:11) --------------------------------------------- В общем вот пример не поленился, посмотрите... поиск угла по проекции не подошел немного пришлось использовать динамичную ось X которая начинается в позиции юнита относительно которого ищем угол и идет прямо к другой точке, сообственно координатой X будет 0 а второй расстояние между двумя этими точками, ну а Z глобальный. вот ссылочка на мапу Добавлено (06-04-2011, 03:17) --------------------------------------------- вот еще на всяк случай с другим файлообменником
Даже если ты самый лучший в мире теоретик, практика тебя нагнет...
|
|
|
|
rixt7956 | Дата: Среда, 06 Апреля 2011, 07:14:24 | Сообщение # 34 |
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
| не мог бы код выложить, а то я не с компа сейчас. Добавлено (06-04-2011, 07:14) --------------------------------------------- и я надеюсь ты в своем примере учел то что ландшафт не плоский.
|
|
|
|
SirNikolas | Дата: Среда, 06 Апреля 2011, 13:08:50 | Сообщение # 35 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| [DUОS], не ожидал. Все это делается элементарно, так, как сказал TheLost. Вот код.Code function ConvertReal takes real r, real min, real max returns real loop exitwhen r < max set r = r - max endloop loop exitwhen r >= min set r = r + max endloop return r endfunction
function GetZAngle takes real x1, real y1, real z1, real x2, real y2, real z2 returns real set x1 = x1 - x2 set y1 = y1 - y2 return ConvertReal(Atan2(z2 - z1, SquareRoot(x1 * x1 + y1 * y1)), .0, 6.283185307) endfunction Сейчас сделаю рисунок. Добавлено (06-04-2011, 13:08) --------------------------------------------- Для определения мы как бы вводим дополнительную ось W, которая проходит через две данные точки. Сопоставляя два рисунка, понимаем, что W1W2 равно расстоянию между точками (по XY), а Z1Z2 - это разность высот. Ну а дальше определяем угол, как обычно, только оси берем другие.
Сообщение отредактировал SirNikolas - Среда, 06 Апреля 2011, 13:10:51 |
|
|
|
rixt7956 | Дата: Среда, 06 Апреля 2011, 16:41:08 | Сообщение # 36 |
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
| спасибо, зайду с компа посмотрю. Добавлено (06-04-2011, 16:41) --------------------------------------------- возник еще один вопрос! Как двигать дами под углом z?
|
|
|
|
SirNikolas | Дата: Среда, 06 Апреля 2011, 17:01:30 | Сообщение # 37 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Перемещение по XY равно Cos(a) * перемещение под наклоном. Изменение Z равно Sin(a) * перемещение под наклоном.
|
|
|
|
rixt7956 | Дата: Среда, 06 Апреля 2011, 17:28:54 | Сообщение # 38 |
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
| я читал статью про сфеерические координаты, но у меня как то криво получается. Мб ты код выложишь.
|
|
|
|
SirNikolas | Дата: Среда, 06 Апреля 2011, 18:58:31 | Сообщение # 39 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| library MoveUnit3D needs OTR, GetTerrainZ//Передвигает юнита u на расстояние distance под углом angle, придавая ему высоту z2. Расстояние измеряется в перспективе, а не на плоскости!Code function MoveUnit3D takes unit u, real angle, real distance, real z2 returns nothing local real x = GetWidgetX(u) local real y = GetWidgetY(u) local real x2 local real y2 set distance = Cos(Atan2(z2 - GetUnitFlyHeight(u) - GetTerrainZ(x, y), distance)) * distance set x2 = x + Cos(angle) * distance set y2 = y + Sin(angle) * distance if OTR_XYpr(x2, y2) then call SetUnitX(u, x2) call SetUnitY(u, y2) else call SetUnitPosition(u, x2, y2) endif call SetUnitFlyHeight(u, z2, 10000.) endfunction endlibrary
|
|
|
|
rixt7956 | Дата: Среда, 06 Апреля 2011, 19:48:17 | Сообщение # 40 |
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
| SirNikolas, 1. Спасибо 2.Quote (SirNikolas) needs OTR Гы, но это не для неё 3. Quote (SirNikolas) OTR_XYpr(x2, y2) then Мне это не надо.Добавлено (06-04-2011, 19:48) --------------------------------------------- блин, это не то
|
|
|
|
[DUОS] | Дата: Воскресенье, 10 Апреля 2011, 11:01:58 | Сообщение # 41 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| rixt7956, Вот формула нахождения угла между прямой и плоскостью.
|
|
|
|
rixt7956 | Дата: Воскресенье, 10 Апреля 2011, 12:48:48 | Сообщение # 42 |
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
| [DUОS], Спасибо
|
|
|
|
[DUОS] | Дата: Воскресенье, 10 Апреля 2011, 15:24:52 | Сообщение # 43 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| rixt7956, Ты шаришь в векторах?)
|
|
|
|
rixt7956 | Дата: Воскресенье, 10 Апреля 2011, 15:54:12 | Сообщение # 44 |
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
| да Добавлено (10-04-2011, 15:52) --------------------------------------------- не много Добавлено (10-04-2011, 15:54) --------------------------------------------- только я не понял что есть : e , c и m
|
|
|
|