Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: enot от 20-04-2021, 14:18:52

Название: Две линии на прямой
Отправлено: enot от 20-04-2021, 14:18:52
Без помидоров и тухлых яиц пожалуйста,
Как используя апи (или без него) определить что две линии лежат на одной прямой

Задача сводится к следующему :
есть список линий
1.) группируем его по линиям которые лежат на одной линии
2.) берем в каждой такой группе только первый элемент, то есть делаем уникальным по линиям на одной оси
Название: Re: Две линии на прямой
Отправлено: Александр Игнатович от 20-04-2021, 14:23:37
1) направления отрезков коллинеарны, векторное произведение равно нулю
2) взять произвольную точку (например, конец) отрезка A, проверить, принадлежит ли она прямой, содержащий отрезок Б
Название: Re: Две линии на прямой
Отправлено: enot от 20-04-2021, 14:25:09
1) направления отрезков коллинеарны, векторное произведение равно нулю
если оба условия выполняются , значит линии лежат на одной оси, или что?
Название: Re: Две линии на прямой
Отправлено: Александр Игнатович от 20-04-2021, 14:26:52
вектора коллинеарны тогда и только тогда, когда векторное произведение равно нулю
Название: Re: Две линии на прямой
Отправлено: enot от 20-04-2021, 14:34:29
2) взять произвольную точку (например, конец) отрезка A, проверить, принадлежит ли она прямой, содержащий отрезок Б

(https://i.postimg.cc/wyqT5jGn/2021-04-20-14-31-22.png) (https://postimg.cc/wyqT5jGn)

Пример на картинке, можно пример кода?
Название: Re: Две линии на прямой
Отправлено: Александр Игнатович от 20-04-2021, 14:36:14
И?
Название: Re: Две линии на прямой
Отправлено: enot от 20-04-2021, 14:38:55
Пример на картинке, можно пример кода?
Вот
Название: Re: Две линии на прямой
Отправлено: Александр Игнатович от 20-04-2021, 14:49:27
Прямой, содержащей отрезок!

Код писать лень, давай так. Прямая A у неё есть A.Origin и A.Direction. Аналогично прямая B: B.Origin, B.Direction.

Первое условие: A.Direction cross product B.Direction = нулевой вектор
Второе условие: (B.Origin - B.Origin) cross product A.Direction = нулевой вектор
Название: Re: Две линии на прямой
Отправлено: Александр Игнатович от 20-04-2021, 14:50:08
Прямой, содержащей отрезок!

Код писать лень, давай так. Прямая 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)
Название: Re: Две линии на прямой
Отправлено: enot от 20-04-2021, 14:53:37
Ага, понял. Будем пробовать)
 
Название: Re: Две линии на прямой
Отправлено: Александр Ривилис от 20-04-2021, 17:55:28
Еще один вариант - определить расстояние от точки начала прямой A до прямой B и расстояние от точки начала прямой B до прямой A. Оба значения должны быть равны 0 (с заданной точностью).
P.S.: Важно, чтобы точки начала не совпадали. Если они совпадают, то перенести начало одной из них.