как установить положительное направление (по часовой стрелке) внутри al oop in python (networkx)? - PullRequest
0 голосов
/ 30 января 2020

Привет всем ,

В настоящее время я учусь и имею проект, в котором мне нужно решить сеть газопроводов. Я использую networkx в качестве библиотеки теории графов, чтобы установить топологию моей сети, а затем применяю Первый и Второй значения kirchhoff l aws для решения проблемы. Чтобы применить второй закон Кирхгофа , мне нужно установить произвольное положительное направление внутри замкнутого l oop, как показано на этом эскизе. Закрыто l oop

У кого-нибудь есть идеи о том, как мне этого добиться, используя Python или любой другой язык программирования?

Конечная цель - установить расчетное значение в пределах каждого ребра равно положительное (1) (если направление ребра по часовой стрелке) или отрицательное (-1) (если направление ребра против часовой стрелки)

Спасибо.

1 Ответ

0 голосов
/ 30 января 2020

Вы решаете на минимальные расстояния? В networkx есть направленные ребра.

Или вы можете просто изучить два узла ребра, используя их координаты (x, y), и определить оттуда ориентацию.

1.) Arctan2

Вы можете создать относительную систему координат, где первая точка - это начало координат

P0(x,y)
P1(x,y)

relative (subtract P0)
P0_rel: (0, 0)
P1_rel: P1 - P0

Теперь есть несколько методов определения ориентации. Например, вы можете посмотреть на сектор P1_rel, используя угол функции arctan2

2.) Угол между векторами со знаком

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

Угол между двумя 3D-векторами с одинаковым началом в одной плоскости

https://math.stackexchange.com/questions/2140504/how-to-calculate-signed-angle-between-two-vectors-in-3d

В Интернете есть много фрагментов кода, и не все они верны и хорошо справляются со специальными случаями.

...