Сообщество программистов Autodesk в СНГ
ADN Club => Revit API => Тема начата: enot от 20-04-2021, 14:18:52
-
Без помидоров и тухлых яиц пожалуйста,
Как используя апи (или без него) определить что две линии лежат на одной прямой
Задача сводится к следующему :
есть список линий
1.) группируем его по линиям которые лежат на одной линии
2.) берем в каждой такой группе только первый элемент, то есть делаем уникальным по линиям на одной оси
-
1) направления отрезков коллинеарны, векторное произведение равно нулю
2) взять произвольную точку (например, конец) отрезка A, проверить, принадлежит ли она прямой, содержащий отрезок Б
-
1) направления отрезков коллинеарны, векторное произведение равно нулю
если оба условия выполняются , значит линии лежат на одной оси, или что?
-
вектора коллинеарны тогда и только тогда, когда векторное произведение равно нулю
-
2) взять произвольную точку (например, конец) отрезка A, проверить, принадлежит ли она прямой, содержащий отрезок Б
(https://i.postimg.cc/wyqT5jGn/2021-04-20-14-31-22.png) (https://postimg.cc/wyqT5jGn)
Пример на картинке, можно пример кода?
-
И?
-
Пример на картинке, можно пример кода?
Вот
-
Прямой, содержащей отрезок!
Код писать лень, давай так. Прямая A у неё есть A.Origin и A.Direction. Аналогично прямая B: B.Origin, B.Direction.
Первое условие: A.Direction cross product B.Direction = нулевой вектор
Второе условие: (B.Origin - B.Origin) cross product A.Direction = нулевой вектор
-
Прямой, содержащей отрезок!
Код писать лень, давай так. Прямая A у неё есть A.Origin и A.Direction. Аналогично прямая B: B.Origin, B.Direction.
Первое условие: A.Direction cross product B.Direction = нулевой вектор
Второе условие: (B.Origin - A.Origin) cross product A.Direction = нулевой вектор
Опечатался чуток, (B.Origin - A.Origin) вместо (B.Origin - B.Origin)
-
Ага, понял. Будем пробовать)
-
Еще один вариант - определить расстояние от точки начала прямой A до прямой B и расстояние от точки начала прямой B до прямой A. Оба значения должны быть равны 0 (с заданной точностью).
P.S.: Важно, чтобы точки начала не совпадали. Если они совпадают, то перенести начало одной из них.