|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
пересечение окружностей
ташкент
Регистрация: 19.06.2007
Сообщений: 3
|
||
Просмотров: 6412
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Решай систему уравнний и получишь координаты точек пересечения, если они вообще могут быть.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 12.01.2006
Донецк
Сообщений: 30
|
; Пересечение 2-х окружностей заданных центром и радиусом, лежащих в одной плоскости
;------------------------------------------------------------------------- ;Параметры: ;P1, R1 - ценр и радиус 1-й окружности ;P2, R2 - ценр и радиус 2-й окружности ; Возвращает список точек пересечения окружностей или nil если не пересекаются (defun 2d_inters_circle (P1 R1 P2 R2 / A A1 CosA D) (setq D (distance P1 P2) A1 (angle P1 P2)) (cond ((equal D (+ R1 R2) $Dopusk) (list (polar P1 A1 R1) (polar P1 A1 R1))) ((> D (+ R1 R2)) nil) (T (setq CosA (/ (- (+ (* R1 R1) (* D D)) (* R2 R2)) 2.0 R1 D) A (atan (sqrt (- 1 (* CosA CosA))) CosA) ) (list (polar P1 (+ A1 A) R1) (polar P1 (- A1 A) R1)) ) ) ) |
|||
![]() |
|
||||
Регистрация: 12.01.2006
Донецк
Сообщений: 30
|
Автор выше приведенной функции : Григорий Черевков
http://www.elecran.com.ua/ =========================== Никакой ответственности за использование этих текстов и возможных Глобальные переменные $Dopusk имеет значение 0.00001 – содержит величину погрешности используемую при различных сравнениях (например координат точек). Он просто необходим для борьбы с накопленной погрешностью при вычислениях. Для инициализации переменных в стартовую часть Вашей программы нужно вставить строки (setq $Dopusk 0.00001 ) |
|||
![]() |
|
||||
Механизатор широкого профиля (б/у) Регистрация: 23.12.2006
Черновцы
Сообщений: 2,933
|
Исходная система двух уравнений:
(X - X1) ^2 + (Y - Y1) ^2 = R1 ^2 (X - X2) ^2 + (Y - Y2) ^2 = R2 ^2 где X1;Y1 и X2;Y2 - координаты центра первой и второй окружности соотвественно R1 и R2 - радиусы первой и второй окружностей Решение системы уравнений дает координаты двух точек (если окружности пересекаются), одной точки (если окружности соприкасаются) либо, если система не имеет решения в действительных числах - окружности не пересекаются и не соприкасаются. |
|||
![]() |