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

Известны координаты начала и конца отрезка;
Известны координаты центра окружности и радиус;
нужно найти програмным способом координаты точки пересечения отрезка и окружности (есть ф-я inters - но это только для линий)
Можно ли это сделать без использования (vl-load-com)

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

Угу. В школе даже проходили...

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

http://www.cad.dp.ua/files/3d_lib.zip
Это библиотека различных геометрических функций.
Там есть функция, которая находит точки пересечения прямой и окружности и функция принадлежности точки отрезку. Вместе они дадут то, что Вам нужно.
P.S.
Подходите к делу творчески - там была опечатка в коде.

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

> VK
математическим способом я я найду без проблем.
я имел ввиду возможность считать эти данные с чертежа или с помощью стандартных функций ЛИСП -не математических (типа INTERS)
всеравно спасибо за ответ

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

> Начинающий
спасибо за ссылку, поковыряю

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

> Пастух
(прошу прощеня - не на ту ссылку кликнул)
спасибо за ссылку, поковыряю

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

-не математических (типа INTERS)

это метод vla-IntersectWith, тока он не годится, потому как

сделать без использования (vl-load-com)

Так что, остается математика smile

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

> VK
Ну ясно - это я и хотел уточнинить. Значит придется использовать vla-IntersectWith.
Большое спасибо.

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

> Начинающий
Можно свой  vla-IntersectWith  написать без использования  vl-load-vom [/com]

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

без использования vl-load-vom
что-то новенькое однако
vl-load-vom

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

> Vitalij
да смысл не втом, чтобы не использовать vl-load-сom как таковую, а чтобы неиспользовать непонятные vla- функции (хотя я в принципе не проив их). Просто хотел уточнить что уесли есть простая inters для отрезков, то может быть я гдето не нашел и для других линий.
Теперь с чистой совестью можно осваивать vla-  .

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

Можно использовать и INTERS .
Достаточно создать список точек лежащих на окружности с некоторым шагом (обеспечивающим точность) и применить к ним вышеописанную функцию...

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

может это не тот случай, но....
(setq nabor (ssget "_F" (list нач кон)))
и тогда в наборе окажутся (объект точкаПересечения)

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

такая тема не раз обсуждалась ищи по поиску

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

;Параметры:
;P1, P2 - точки задающие прямую
;Pc - центр окружности
;R - радиус окружности
; Возвращает: Список точек пересечения или nil если не пересекаются

(defun 2d_inters_lc (P1 P2 Pc R / A An D Ph)
 (setq A (angle P1 P2)
       An (+ A Pi2)
       Ph (inters P1 P2 Pc (polar Pc An 1000.0) nil)
       D (distance Ph Pc)
 )
 (cond
  ((equal D R 0.00001) (list Ph Ph))
  ((> D R) nil)
  (T (setq D (sqrt (- (* R R) (* D D)))) (list (polar Ph A D) (polar Ph A (- D))))
 )
)

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

В моем предыдущем посте имеется ввиду, что переменная Pi2 это (/ Pi 2)
Функция ищет пересечение прямой и окружности. Для поиска пересечения отрезка и окружности надо, конечно, еще дописать кусок на проверку принадлежности точки отрезку.

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

Ну ладно... Вот еще придумал способ. Значит, отрезок и окружность. Они пересекаются. Надо узнать где именно. И без vla-.
Выполняем команду TRIM, где в качестве режущей кромки указываем отрезок и обрезаем окружность с любой стороны от отрезка. Или лучше режущей сделать окружность, а обрезать отрезок. Только надо предусмотреть точку отката, чтоб восстановить что нарезали.
Это идея, а код писать недосуг... Нюхом чую, что без vla- можно обойтись, хотя получится сложнее чем с vla-.

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

Ах да, забыл сказать, что точки пересечения будут соответствовать новоявленным конечным точкам оставшихся обрезков. Ну и частные случаи придется обработать дополнительно. Вроде такого, когда конец отрезка лежит на окружности.

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

> VK
подход не плохой и откат можно сделать запросто

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

23HA2 пишет:

такая тема не раз обсуждалась...

да, только везде использовались финкции расширения ядра VLISP, а задача была без использования этих функций
Мысль была такая: если работает привязка к точке пересечения, значит эта информация уже вычислена и естьв чертеже - следовательно ее можно просто прочитать (зачем еще раз вычислять то что уже вычислено - вроде как не рационально)

> Олег
спасибо, попробую

> VK
согласен с ZZZ

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

> VK
хорошая идея (а код и не нужно-сам напишу), учитывая, что и окружность и отрезок являются вспомогательными элементами т.е. обрезаю отрезок и читаю координату Y. Восстанавливать отрезок не нужно

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

> с уважением Андрей
Наилучший метод только вы далее не дописали, что нужно делать.

(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)))

последнюю строчку можно малость изменить и будет ещё выдавать и имя окружности

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

Если нужно будет сделать наоборот, по окружности выбрать пересекаемые линии, то делается выбор линий сначала по (ssget "_C" ...) прямоугольником чуть большим диаметра окружности (точки можно посчитать запросто), а потом делается проверка найденых линий на пересечение с данной окружностью такая же как > ZZZ (2005-03-31 09:06:27). Ну и т.д.

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

Выше описаный подход применим только на пересечение с прямыми участками (не для двух кривых). Ну а для пересечение двух кривых можно попытатся использовать подход предложенный VK. И это без vla.

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

Можно вопрос.
Я привел простую функцию, которая быстро и без всяких дополнительных построений решает задачу, полностью отвечающую поставленной. Что не устраивает?