Тема: Пересечение с нелинейными объектами

В Акаде существует функция нахождения точки пересечения двух линий. А как насчет определения точки пересечения отрезка (линии, луча) с объектами типа окружности, дуги? Буду признателен за совет.

Re: Пересечение с нелинейными объектами

Функцию привел на сайте:

http://book.by.ru/cgi-bin/book.cgi?book … 1008770245

Re: Пересечение с нелинейными объектами

Перепечатка со ссылки  http://book.by.ru/cgi-bin/book.cgi?book … 1008770245  /admin/

В Автокаде существует и такая функция. Это метод IntersectWidth для vla-объектов Visual Lisp.
Примитивы любого типа. Возвращается весь список точек пересечения (это особенно удобно для ломаных полилиний). Примерный текст такой:
(defun Intersect (/ Prim1 Prim2 Points Rezult)
(setq Prim1 (vlax-ename->vla-object (car (entsel "Объект1:")))
Prim2 (vlax-ename->vla-object (car (entsel "Объект2:")))
Points (vl-catch-all-apply 'vla-IntersectWith (list Prim1 Prim2 acExtendNone))
)
(cond
((vl-catch-all-error-p Points) nil)
((vl-catch-all-error-p
(setq Points (vl-catch-all-apply 'vlax-safearray->list (list (vlax-variant-value Points))))
) nil
)
(t Points ;Преобразование к удобочитаемому списку точек
(while Points
(setq Rezult (cons (list (car Points) (cadr Points) (caddr Points)) Rezult)
Points (cdddr Points)
)
)
Rezult
)
)
)