Как найти точку если известно растояние

Алексей Аминодов-Борисов, Вот условия автора вопроса, по сути в Радиусе 5 км от точки А есть точка В но В КАКОМ МЕСТЕ этой окружности неизвестно:
5eda74b157dd6261012836.jpeg

Еще раз подробно:
— известна точка А есть ее широта и долгота
— я знаю что от точки А на определенном расстоянии (не большом макс 5 км), есть точка B
— знаю расстояние между ними по x и y. (диаметр окружности на которой лежит точка В)

Поэтому тут либо автор неправильно сформулировал либо вопрос в принципе некорректный.

Когда мы строим ломаную или кривую, иногда необходимо вместо привычных декартовых X,Y-координат задавать точку кривой через угол и расстояние. Ни в GDI, ни в GDI+, нет инструментов, чтобы задать координаты точки по углу от произвольной прямой и расстоянию.

Зато координаты можно очень легко посчитать. Вот этим сейчас и займемся. А потом найдем угол между двумя прямыми.

Найти координаты по углу и расстоянию

Если прямая, от которой необходимо отложить угол, параллельна оси X, формулы для нахождения координат достаточно очевидны.

Рис1. Прямая отстоит на угол от оси X

Latex formula

Latex formula

Где:

L — расстояние, или длина прямой (P1, P2)

А — угол, на который отстоит прямая (P1, P2) от прямой (P0, P1). Отрицательное значение угла означает — против часовой стрелки.

Теперь придадим прямой (P0, P1) наклон.

Рис.2. Прямая отстоит на угол от наклонной прямой

A (синий) — это угол, на который отстоит (P1, P2) от прямой (P0, P1);

В (красный) — угол на между прямой (P0, P1) и осью X;

C (оранжевый) — угол на между прямой (P1, P2) и осью X.

Задача сводится к нахождению угла C. Как нетрудно убедится по рисунку:

Latex formula

Угол А нам известен. Угол B найдем через arctan2. Функция arctan2 есть во множестве языков. Возможно, будет называться atan2.

Latex formula

Таким образом, функция для нахождения координат точки выглядит так:

// Посчитать координаты по углу и расстоянию

// P0,P1 — прямая, точка считается от P1

// A — угол отклонения от (P0,P1), градусы

// L — расстояние до точки

function CalcPolarCoord(const P0, P1: TPointF;

  A, L: Single): TPointF;

var

  B, C: Single;

begin

  B := arctan2(p0.Yp1.Y, p0.Xp1.x);

  C := A * PI/180 + B;

  Result.X := p1.X + cos(C) * L;

  Result.Y := p1.Y + sin(C) * L;

end;

И что, всегда работает? Всегда.

Рис.3. Это работает всегда, потому что геометрия возникла в мезозое и потому вечна

Найти угол по трем координатам

Рассмотрим процесс, обратный нахождению координаты по углу. Теперь будем находить угол между отрезками ломаной. Мы в плоскости работаем в декартовых координатах. Меняем мышкой координаты X, Y. А ситуация может возникнуть такая, что для предметной области важно хранить данные в полярных координатах.

Функция такая:

// Нахождение угла между тремя точками в градусах

// Точки заданы массивом из трех элементов

function CalcPolarAngle(const pnt: Array of TPointF): Single;

var

  a1, a2: Single;

begin

  if Length(pnt)<3 then

    Exit;

  a1 := ArcTan2(pnt[0].ypnt[1].y, pnt[0].xpnt[1].x) * 180/PI;

  a2 := ArcTan2(pnt[2].ypnt[1].y, pnt[2].xpnt[1].x) * 180/PI;

  Result := (a2 a1);

end;

Более продвинутую функцию можно найти в статье Пересечение прямых, угол и координаты пересечения.


Друзья, спасибо за внимание!

Оставляйте комментарии. Подписывайтесь на телегу.

В группе комментариев уже потихоньку становится интересно )))

Veinar, я думаю, что существуют две точки, принадлежащие заданной прямой и находящиеся на заданном расстоянии от заданной плоскости. Не вдаваясь в подробности вычислений, могу предложить два способа решения задачи.

Первый способ заключается в том, что нужно найти плоскости, параллельные заданной и расположенные на заданном расстоянии от неё. Затем нужно найти точки пересечения заданной прямой с найденными плоскостями.

Второй способ заключается в том, что находится точка пересечения заданных прямой и плоскости. Затем находятся расстояния от точки [math](1,~0,~-1)[/math] до заданной плоскости и до найденной выше точки. Затем рассматриваются подобные треугольники, расположенные в плоскости, перпендикулярной заданной плоскости, и проходящей через заданную прямую.

Вроде бы так… :crazy:

If I can move one unit along a line I can move any distance along that line. We’ll calculate how much we would have to add to each of $x_1$ and $y_1$ to move one unit along the line and then we’ll multiply that by $d$ to get the answer.

Let $d^{prime}$ be the distance between $(x_1,y_1)$ and $(x_2,y_2)$. It’s value is $$d^{prime}=sqrt{(x_2-x_1)^2+(y_2-y_1)^2}$$

If we move from $(x_1,y_1)$ to $(x_2,y_2)$ along the line connecting them we move $d^{prime}$ units. We can represent this by the function

$$(x_1,y_1)mapsto (x_1+(x_2-x_1),y_1+(y_2-y_1))$$

To move one unit along the same line, we divide the amount of the change by $d^{prime}$ to get

$$(x_1,y_1)mapsto (x_1+frac{1}{d^{prime}}(x_2-x_1),y_1+frac{1}{d^{prime}}(y_2-y_1))$$

Finally, to move a distance $d$ along the line we multiply the change by $d$ to get

$$(x_1,y_1)mapsto (x_1+frac{d}{d^{prime}}(x_2-x_1),y_1+frac{d}{d^{prime}}(y_2-y_1))$$

У меня есть отрезок с известными координатами концов. На этом отрезке есть точка. Я знаю расстояние от начала отрезка до этой точки. Мне надо найти координаты этой точки. Как найти эти координаты?

Пример: Есть 2 точки А(3,3) и В(6,4). Длина отрезка примерно 3,16. И есть точка С(?,?) на отрезке. Как найти координаты, если от А до С =1,8 ???

Dmytro's user avatar

Dmytro

6,7011 золотой знак20 серебряных знаков55 бронзовых знаков

задан 3 мар 2016 в 20:40

Andryxa's user avatar

4

Имеется отрезок AB с координатами A(Xa, Ya) и B(Xb, Yb).
Требуется найти координаты точки C(Xc, Yc), лежащей на отрезке AB на расстоянии Rac от точки A.

Rab = sqrt((Xb - Xa) ^ 2 + (Yb - Ya) ^ 2)
k = Rac / Rab
Xc = Xa + (Xb - Xa) * k
Yc = Ya + (Yb - Ya) * k

Обозначения:
f ^ n — возведение f в степень n, в нашем случае (первом) f будет Xb - Xa и n будет 2.
sqrt(f) — квадратный корень из f, в нашем случае f будет (Xb - Xa) ^ 2 + (Yb - Ya) ^ 2.
f / n — деление f на n, в нашем случае f будет Rac и n будет Rab.
f * n — умножение f на n, в нашем случае (первом) f будет Xb - Xa и n будет k.

Mark Khromov's user avatar

ответ дан 4 мар 2016 в 6:54

Konstantin Les's user avatar

Konstantin LesKonstantin Les

1,5388 серебряных знаков12 бронзовых знаков

2

Алгоритм без кода (довольно элементарный):

Имеем:
Две точки A, B; len — расстояние от точки А до требуемой точки C

full_len = |B - A| // длина вектора, соединяющего две точки == длина отрезка
C = A + (B - A) * (len / full_len)

Сложение векторов и умножение на число — очевидные операции.

ответ дан 3 мар 2016 в 20:56

int3's user avatar

int3int3

2,4579 серебряных знаков19 бронзовых знаков

8

nodet — точка конец вектора, в твоем случае точка b
nodef — точка начало вектора, в твоем случае точка a

dx = nodet.x - nodef.x 
dy = nodet.y - nodef.y 
dz = nodet.z - nodef.z
r = math.sqrt(dx ** 2 + dy ** 2 + dz ** 2) 
xx = dx * (step/r) 
yy = dy * (step /r)
zz = dz * (step /r)
newnode = node(nodef.x + xx,nodef.y + yy,nodef.z + zz)

newnode — новая точка на заданом расстоянии

ответ дан 12 ноя 2019 в 16:31

qvuer7's user avatar

qvuer7qvuer7

113 бронзовых знака

Понравилась статья? Поделить с друзьями:
  • Как найти номер вхождения элемента массива
  • Как найти мужчину для сестры
  • Как быстро ты найдешь панду
  • Как составить меню для учащихся
  • Как найти друг друга в игре майнкрафт