Сейчас 10:42:09 Пятница, 22 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: PUVer, SirNikolas, Ty3uK  
Угол 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

 

  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz