Удлинение линии до определенной длины с 2-х точек

Я делаю платформерную игру на C ++, используя библиотеки SFML и Box2D.
У игрока есть пистолет, я пытаюсь осуществить стрельбу.

Box2D имеет функцию RayCast, которая нуждается в двух позициях для проверки пересечений между ними.
У меня есть положение игрока и положение мыши. В настоящее время грань между этими двумя не идеальна.

Мне нужна третья позиция, то есть позиция, где выстрел из пистолета закончится.
Расстояние между позицией игрока и третьей позицией всегда должно быть 1000.

0

Решение

Математика довольно проста. Рассмотрим следующую строку, A и B — ваши известные точки (A — источник сегмента, т. Е. Ваш игрок), а C — третья точка, которую вы ищете:

   A-----------B------------C
(Xa,Ya)     (Xb,Yb)      (Xc,Yc)

Теперь расстояния:

AB = sqrt( (Xb - Xa)² + (Yb - Ya)² )
AC = 1000

Кросс-умножить, чтобы получить Xc:

AB -> Xb - Xa
AC -> Xc - Xa

Xc - Xa = AC * (Xb - Xa) / AB
Xc = Xa + (AC * (Xb - Xa) / AB)

Так же, Yc = Ya + (AC * (Yb - Ya) / AB)

Обратите внимание, что это также работает, если C находится между A и B, единственное (очевидное) ограничение — если A и B — одна и та же точка (AB = 0, не передает информацию о направлении и справедливо дает деление на ноль).

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]