Есть точка А (допустим место куда я указал кастованной абилкой) и точка B (координаты ближайшего юнита к точке А).
Если расстояние между ними меньше или равно N то нужная мне точка и есть А.
Но если больше, то это должна быть некая точка C на расстоянии от B с отступом в N в направлении к А.
Как вычислить точку С?

Принятый ответ

Чёт сложно
Т.е. простыми словами - если от точки каста до юнита меньше чем 300, с юнитом что-то происходит.
Если больше - то как я понял из ваших слов - точка С сдвигается на то расстояние от Б, которого нехватает до юнита. ->
Делаем инверсию и получаем, то что Точка С будет находиться от А на том расстоянии, которого нехватает до юнита.
Т.е. 400 = 300(N) + 100(расстояние, которого нехватает до юнита)
400 - 300(N) = 100
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
17
5 лет назад
Отредактирован N1ghtSiren
0
Чёт сложно
Т.е. простыми словами - если от точки каста до юнита меньше чем 300, с юнитом что-то происходит.
Если больше - то как я понял из ваших слов - точка С сдвигается на то расстояние от Б, которого нехватает до юнита. ->
Делаем инверсию и получаем, то что Точка С будет находиться от А на том расстоянии, которого нехватает до юнита.
Т.е. 400 = 300(N) + 100(расстояние, которого нехватает до юнита)
400 - 300(N) = 100
Принятый ответ
2
16
5 лет назад
Отредактирован Drulia_san
2
PyCCKuu_4eJl:
Чёт сложно
Т.е. простыми словами - если от точки каста до юнита меньше чем 300, с юнитом что-то происходит.
Если больше - то как я понял из ваших слов - точка С сдвигается на то расстояние от Б, которого нехватает до юнита. ->
Делаем инверсию и получаем, то что Точка С будет находиться от А на том расстоянии, которого нехватает до юнита.
Т.е. 400 = 300(N) + 100(расстояние, которого нехватает до юнита)
400 - 300(N) = 100
По-моему всё вообще не так как ты понял.
Здесь скорее векторная алгебра идет.
Я наверное сложно сформулировал, скажу проще, если известны координаты двух точек и длины линии между ними, как узнать точку на этой линии с отступом N от точки А или Б в сторону противоположной точки? Мне нужно понять как посчитать X и Y этой точки.
Ну представь что у тебя есть абилка которая делает взрыв (или блинк) в указанной точке. Если точка не дальше чем 900 единиц от тебя то взрыв будет там где ты указал абилкой. Но если дальше то взрыв будет ровно на дистанции 900 от тебя в направлении к точке которую ты указал абилкой. Как посчитать точку где будет этот взрыв?
Кажется я понял как надо, включив математического аналитика после банки пивка я понял, что нужно:
  1. Посчитать угол между точками А и Б, пусть это будет angle
  2. Выбрать точку от которой нужно отталкиваться, пусть это будет А, а её координаты ax и ay
  3. Посчитать X и Y для С
cx = ax + 900 * Cos(angle)
xy = ay + 900 * Sin(angle)
Вынос мозга, но к счастью смог додуматься до этого в 3 часа ночи
0
24
5 лет назад
0
Эээээ углы и синусы-косинусы то тут зачем?
3
17
5 лет назад
3
Мотемотичка, ты достала.
4
24
5 лет назад
Отредактирован prog
4
Именно через векторную алгебру это и решается самым простым способом.
Самое топорное решение - нормализуем вектор и умножаем на нужную длину.
Т.е. что-то вроде такого (порядок переменных может потребоваться поменять, не задумывался о том что у тебя за какую из двух точек отвечает)
сx = ax + ((bx-ax)*Lt/Lr)
сy = ay + ((by-ay)*Lt/Lr)
где Lt и Lr это желаемое и имеющееся растояние.
0
16
5 лет назад
0
prog:
Эээээ углы и синусы-косинусы то тут зачем?
Затем что всё работает как надо, не вижу смысла искать ответа на вопрос зачем когда это работает идеально)
Твой вариант делает то же самое, как ни странно. Но мой вариант с косинусами\синусами выглядит проще
4
24
5 лет назад
4
Drulia_san, да мне то что, хоть через пятимерную проекцию считайте, если работает. Углы дороже в вычислениях чем разобранные на координаты векторы.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.