Тема: Пересечение линий и VBA
Как определить пересекаются ли линии или нет и найти точку пересечения
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Пересечение линий и VBA
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как определить пересекаются ли линии или нет и найти точку пересечения
Можно решить геометрическую задачу пересечения двух отрезков, проходящих через две пары точек (х1,у1), (х2,у2) и (х3,у3), (х4,у4). В результате получится два уравнения с двумя неизвестными (х и у). Потом эти уравнения решить как совместную систему. Если данная система имеет действительные корни (х=а1, у=а2), то эти (а1,а2) и будут являться координатами точки пересечения. В противном случае - эти линии параллельны. В общем виде можно написать соответствующую lisp-программу с двумя уравнениями нахождения координат а1 и а2.
IntersectWith - это конечно хорошо и правильно. Я несколько неточно сформулировал задачу.
Необходимо найти все объекты, пересекающиеся с выбранной линией. Я использовал метод GetBoundingBox, но что-то
уж больно сложная процедурища получается. Может кто что попроще предложить может.
И насчет решения системы 2х уравнений: его можно опять же применить к 2м обектам, а меня только один, а остальные надо найти.
1) Для линии есть прямоугольник (x1,y1 - x2,y2)
2) Есть такая функция acedGetSS которая при некоторых опциях возвращает объекты внутри прямоугольника и пересекающихся с прямоугольником. Для п.1 box найди такие объекты.
3) Для каждого объекта сделай IntersectWith c линией.
acedGetSS - это в ARX
поищи что-нибудь похожее в VBA.
Ищи "Selection set"
Есть функции на ЛИСП (по формулам аналитической геометрии), решающие эту задачу.
Пиши
Если нужен код в Lisp то есть функция :
(inters [])
определение точки пересечения двух отрезков, проходящих через точи t1,t2 и t3,t4. Если нет, то точка пересечения должна быть в пределах обоих отрезков, иначе отрезки воспринимаются как бесконечные прямые
_$ (inters '(1 1) '(5 5) '(1 5) '(5 1))
(3.0 3.0)
_$
осталось только определить координаты точет на прямых :))
чавойто глюкануло!!!
(inters T1 T2 T3 T4 n)
если n нет, то.....
Все описано : проекитирование в Auto Lisp основы програмирования Кудрявцев Е.М.
Для VBA не берусь подсказать, но думаю что-то похожее есть. Необходимо создать набор из примитивов, пересекающихся с данной линией ,в Лиспе (ssget "_F"...). Просмотреть каждый примитив набора и найти точку пересечения IntersectWith линии с каждым примитивом набора. Если примитив - линия, можно использовать и inters, но IntersectWith - более рационально.
Finds the intersection of two lines
(inters pt1 pt2 pt3 pt4 [onseg])
All points are expressed in terms of the current UCS.
If all four point arguments are 3D, inters checks for 3D intersection.
If any of the points are 2D, inters projects the lines onto the current
construction plane and checks only for 2D intersection.
Arguments
pt1 - One endpoint of the first line.
pt2 - The other endpoint of the first line.
pt3 - One endpoint of the second line.
pt4 - The other endpoint of the second line.
onseg - If specified as nil, the lines defined by the four pt arguments
are considered infinite in length. If the onseg argument is omitted or is not nil,
the intersection point must lie on both lines or inters returns nil.
Return Values
If the onseg argument is present and is nil, inters returns the point where the lines intersect,
even if that point is off the end of one or both of the lines.
If the onseg argument is omitted or is not nil, the intersection point must lie on both lines or
inters returns nil. The inters function returns nil if the two lines do not intersect.
Examples
(setq a '(1.0 1.0) b '(9.0 9.0))
(setq c '(4.0 1.0) d '(4.0 2.0))
Command: (inters a b c d)
nil
Command: (inters a b c d)
nil
Command: (inters a b c d nil)
(4.0 4.0)
Загляни на http://www.cad.dp.ua/stats/a_vba/
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Пересечение линий и VBA
Форум работает на PunBB, при поддержке Informer Technologies, Inc