Re: Как найти координаты точки пересечения окружности и отрезка?

> Олег
Решает только эту задачу.

Re: Как найти координаты точки пересечения окружности и отрезка?

> ZZZ
А что, автор темы просил решить другую задачу?
А чего стоят подходы с trim и _fence, если объекты за границами экрана?

Re: Как найти координаты точки пересечения окружности и отрезка?

> Олег
А как пользователь выбирает примитивы (ручками)?
И при большом желании можно переключится (модель/лист) и приблизится (vl-cmdf "_.zoom" "_o" ss ) к исходным примитивам где бы они не были.
Олег вы решили поставленную задачу даже очень хорошо, просто и доходчиво, никто не спорит. Чувствуется рука мастера.
В тоже время согласитесь, что и другие методы решения поставленной задачи тоже имеют право жить, к тому же они более универсальны. На то он и форум чтобы рассматривать различные идеи. Я же не лобирую только (ssget "_F" ...), если вы не заметили.

Re: Как найти координаты точки пересечения окружности и отрезка?

> Олег
У вашей програмки есть один большой плюс, она находит обе точки пересечения с линией (у меня только одну). Только одно но. Если линия заканчивается внутри окружности, то прога также находит другую точку пересечения. Из это следует, что Ваша программа ищет точки пересечения окружности и прямой. И не понятно, что именно там пересекается линия, а не её продолжение.
Таким образом оба подхода не идеальны.
НИЧЬЯ :)

Re: Как найти координаты точки пересечения окружности и отрезка?

> Олег
Извините, я просто не успел еще опробовать и разобраться (с LISPом занимаюсь не долго, поэтому богло глянув на код оценить способ мне трудно) не хватило времени  :(
а вообще все советы очень ценные - большое спасибо :)

Re: Как найти координаты точки пересечения окружности и отрезка?

> ZZZ
а вот так вроде лучше:

(setq ent_line (car(entsel"\nSelect LINE ")))
(setq pt1 (cdr(assoc 10(entget ent_line))))
(setq pt2 (cdr(assoc 11(entget ent_line))))
(setq ss(ssget "_F" (list pt1 pt2) '((0 . "CIRCLE"))))
;(setq pt_list(mapcar '(lambda (a) (cadr (last a))) (ssnamex ss)))
(setq pt_list (mapcar 'cadr (cdddar (ssnamex ss))))

выдаёт две точки.

Re: Как найти координаты точки пересечения окружности и отрезка?

Кстати результаты с Олегом похожие но немного разные.
Наверное у меня точность хромает (даже при отключенных привязках). :(

Re: Как найти координаты точки пересечения окружности и отрезка?

;Экперименты с TRIM
;На разных машинах работают по разному
;на обоих AC2004 engl
;На одной машине обрезает и линию и окружность?
; в одном варианте слева а вдругом справа?
;На другой машине
; обрезает только отрезок (так и нужно)
; вар.1 с одной стороны, вар.2 с другой стороны
; почему?
(defun fun1 ()
(setq okrname (entmakex '((0 . "CIRCLE") (10 0.0 0.0 0.0) (40 . 50.0))))
(setq linname (entmakex '((0 . "LINE") (10 10.0 -20.0 0.0) (11 40.0 60.0 0.0))))
)
; Вариант1
(defun c:funv1 (/ a1 a2 a3)
(fun1)
(setq a1 (ssget (list 40 60)) a2 (ssget (list 0 50)) a3 (list 40 60))
(command "_.trim" "" a1 a2 "" a3 "")
)
; Вариант2
(defun c:funv2 (/ a3)
(fun1)
(setq a3 (list 40 60))
(command "_.trim" "" okrname linname "" a3 "")
)

Re: Как найти координаты точки пересечения окружности и отрезка?

> ZZZ

> DMS
- при указании курсором с привязкой координаты различаются в третьем знаке после зап. - выбирать руками (надо автоматически)

> Олег
работает нормально, только здесь математика (т.е. повторно вычисляеся уже вычисленное автокадом значения, по моему предположению; хотя с обрезкой тоже хрен редьки не слаще - тоже дополнительные манипуляции)

Re: Как найти координаты точки пересечения окружности и отрезка?

> Начинающий
Отключай привязки

Re: Как найти координаты точки пересечения окружности и отрезка?

> ZZZ
Привязки отключены.
я имею в виду, что когда код отработал, запускаю каую-нибудь команду с включенными привязками и сравниваю координаты точки на которую указывает курсор со списком координат, полученным после работы кода - разница на третьем знаке после запятой.

Re: Как найти координаты точки пересечения окружности и отрезка?

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

(vlax-safearray->list
  (vlax-variant-value
    (vla-intersectwith
      vla-circle vla-line acExtendNone
)))

Re: Как найти координаты точки пересечения окружности и отрезка?

> Эдуард
Спасибо, это я уже уяснил