Преобразовать уравнения решения линий в многократно используемую функцию javascript с неизвестными x и y - PullRequest
0 голосов
/ 18 апреля 2020

Таким образом, у меня есть решение для определения местоположения (точки пересечения) кого-либо на основе углов ориентиров (312.27) и (19.65) градусов и координат сетки (1,5) и (9,7) этих ориентиров. Итак, проблема, с которой я сталкиваюсь, заключается в том, как я могу преобразовать эти формулы в нечто, что я могу динамически добавить в угол и координаты сетки и вернуть точку пересечения x и y для местоположения?

Equations of the Lines based on land marks:
P1: y = cot(312.27)*x + 5 - cot(312.27)*1 ⇒ y = -0.91x + 5.91
P2: y = cot(19.65)*x + 7 - cot(19.65) * 9 ⇒ y = 2.80x - 18.21

solve point of intersection:
P1 = P2
-0.91x + 5.91 = 2.80x - 18.21
5.91 + 18.21 = 2.80x + 0.91x
24.12 = 3.71x
6.5 = x
y = -0.91(6.5) + 5.91
y = 0
Your position is (6.5,0).

Итак, я смотрю на создание такой функции, как:

function getLocation(angle1, angle2, coord1, coord2){}

, но у меня просто возникают проблемы, когда я пытаюсь понять, как я могу преобразовать это решение во что-то, что вывело бы х и у. Поскольку я должен был бы обойти x или y, который неизвестен.

Любые идеи будут оценены.

примечание: углы преобразуются в радианы.

1 Ответ

0 голосов
/ 18 апреля 2020

Вам необходимо решить систему уравнений в терминах углов и координат x, y:

// let phi1 be the first angle and phi2 be the second angle thus
// let P1 be the first point and P2 be the second point

y = x * cot(phi1) + P1.y - P1.x * cot(phi1)

Similarly

y = x * cot(phi2) + P2.y - P2.x * cot(phi2)

Equating both sides:

x * cot(phi1) + P1.y - P1.x * cot(phi1) = x * cot(phi2) + P2.y - P2.x * cot(phi2)

Solving for x

x * (cot(phi1) - cot(phi2)) = P2.y - P2.x * cot(phi2) - P1.y + P1.x * cot(phi1)

Thus:

x = (P2.y - P2.x * cot(phi2) - P1.y + P1.x * cot(phi1)) / (cot(phi1) - cot(phi2)) 

Once you get x you can plug x in any of the equations for y:

y = x * cot(phi1) + P1.y - P1.x * cot(phi1)

Итак, чтобы получить x и y:

function getLocation(angle1, angle2, coord1, coord2) {

    let num = coord2.y - coord2.x * cot(angle2) - coord1.y + coord1.x * cot(angle1)
    let den = cot(angle1) - cot(angle2)
    let x = num / den
    let y = x * cot(angle1) + P1.y - P1.x * cot(angle1)

    // do something awesome with x and y
}
...