Форум программистов, компьютерный форум, киберфорум
Наши страницы
AutoCAD
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
JunProg
1 / 1 / 0
Регистрация: 19.10.2013
Сообщений: 24
1

AutoLisp: Как получить точку пересечения прямой и окружности?

19.10.2013, 19:33. Просмотров 3697. Ответов 14
Метки нет (Все метки)

Здравствуйте!
Как можно получить точку пересечения прямой и окружности?

Lisp
1
2
3
4
5
6
7
Например:
(defun main()
; есть прямая
(command "_pline" p1 p2 "")
;окружность с центром C  и радиусом R
(command "_circle" C R)
)
Как получить p3- точку пересечения данной прямой и окружности?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2013, 19:33
Ответы с готовыми решениями:

как открыть dwg - чертеж из autolisp?
Подскажите пожалуйста команду, если она существует, которая бы открывала чертеж...

AutoLisp почему-то рисует не так как я хочу
Упростил код до минимума: (defun circles (n) (setq c (getpoint "Enter the...

AutoLisp: Как задать толщину и тип линий
Здравствуйте! Подскажите пожалуйста как программно задать тип и толщину линий?...

AutoLisp: Как программно задать выбрать ось вращения?
Здравствуйте! Хотелось бы узнать как программно можно выбрать ось вращения при...

Получить точку на окружности (на хорде) между заданными точками и координаты пересечения окружности с прямой
Дано: Координаты двух точек на плоскости (в них требуется вписать окружность)...

14
ur_naz
Заблокирован
19.10.2013, 19:43 2
Цитата Сообщение от JunProg Посмотреть сообщение
Как можно получить точку пересечения прямой и окружности?
три способа:
привязки,
геом. решатель автокада,
объектная модель, конкретно vla-intersectwith
0
JunProg
1 / 1 / 0
Регистрация: 19.10.2013
Сообщений: 24
19.10.2013, 21:03  [ТС] 3
Если можно пример... самым простым способом)
0
ur_naz
Заблокирован
19.10.2013, 21:45 4
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(if (and (setq circ (car (entsel "\nSelect Circle, Dude: ")))
     (setq line (car (entsel "\nSelect Line, Bro: ")))
    )
  (progn
    (vl-load-com)
    (alert
      (vl-princ-to-string
    (vlax-safearray->list
      (vlax-variant-value
        (vla-intersectwith
          (vlax-ename->vla-object line)
          (vlax-ename->vla-object circ)
          acExtendBoth
        )
      )
    )
      )
    )
  )
)
1
JunProg
1 / 1 / 0
Регистрация: 19.10.2013
Сообщений: 24
19.10.2013, 22:04  [ТС] 5
Спасибо, конечно большое) а нет специальной функции лиспа?
0
ur_naz
Заблокирован
19.10.2013, 22:12 6
vla-intersectwith как раз и есть специальная функция
1
JunProg
1 / 1 / 0
Регистрация: 19.10.2013
Сообщений: 24
19.10.2013, 23:07  [ТС] 7
Если можете, покажите, как будет выглядеть программа с этой функцией?
0
ur_naz
Заблокирован
19.10.2013, 23:15 8
а что вам не понятно в #4?
1
JunProg
1 / 1 / 0
Регистрация: 19.10.2013
Сообщений: 24
20.10.2013, 00:15  [ТС] 9
а ну да понятно) Спасибо большое)
0
Slavnoff
221 / 10 / 0
Регистрация: 04.11.2012
Сообщений: 62
22.10.2013, 12:52 10
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(if (and (setq circ (car (entsel "\nSelect Circle, Dude: ")))
     (setq line (car (entsel "\nSelect Line, Bro: ")))
    )
  (progn
    (vl-load-com)
    (alert
      (vl-princ-to-string
    (vlax-safearray->list
      (vlax-variant-value
        (vla-intersectwith
          (vlax-ename->vla-object line)
          (vlax-ename->vla-object circ)
          acExtendBoth
        )
      )
    )
      )
    )
  )
)
Я так понимаю данный код работает так, мы тыкаем мышкой на первый объект, затем на другой. И у нас ищется точка пересечения этих объектов.

А как задать чтобы программа сама выбрала объект1 и объект2?
0
ur_naz
Заблокирован
22.10.2013, 13:05 11
например, с помощью (entlast)
ps советую вам хоть немного поизучать Автолисп, перед тем как начинать что-то писать на нем
0
JunProg
1 / 1 / 0
Регистрация: 19.10.2013
Сообщений: 24
24.10.2013, 01:19  [ТС] 12
Можете пример привести создания окружности,линии и нахождения их точки пересечения. Просто у меня с ошибкой получается(

Добавлено через 12 минут
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(defun m()
  (progn
    (vl-load-com)
    (command "_circle" (list 100 100) 100)
    (setq circ (entlast))
    (command "_line" (list 100 100) (list 250 250) "")
    (setq line (entlast))
    (alert
      (vl-princ-to-string
    (vlax-safearray-> list
      (vlax-variant-value
        (vla-intersectwith
          (vlax-ename->vla-object line)
          (vlax-ename->vla-object circ)
          acExtendBoth
        )
      )
    )
      )
    )
  )
)
Я понимаю, что что то не правильно делаю остается вопрос что?
0
ur_naz
Заблокирован
24.10.2013, 08:15 13
А вы разницу между моим и своим кодом не замечаете? Может где пробел лишний? И из-за этого возникает ошибка...
0
Chingizbek
0 / 0 / 0
Регистрация: 09.07.2018
Сообщений: 1
09.07.2018, 07:28 14
из интернета:


Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun intersect (obj1 obj2 / tmp x y)
(setq tmp 
    (vlax-variant-value (apply 'vla-intersectwith
     (reverse (cons 1 (mapcar 'vlax-ename->vla-object (list obj1 obj2)))))))
(if (> (vlax-safearray-get-u-bound tmp 1) 0)
(vl-remove nil (mapcar '(lambda (z / ret) 
    (if y (setq ret (list x y z) x nil y nil)
       (if x (setq y z) (setq x z)
        );if
    );if
             ret);lambda 
(vlax-safearray->list tmp)))
);end of if
)
0
snipe
2892 / 996 / 231
Регистрация: 07.08.2013
Сообщений: 2,503
09.07.2018, 07:43 15
Chingizbek, )))) самое главное вовремя
0
09.07.2018, 07:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2018, 07:43

Найти точку пересечения прямой и окружности
Задана окружность с центром в точке O(0,0) и радиусом R0, и прямая y = ax+b....

Составить каноническое уравнение прямой, проходящей через точку М1 и точку М2 пересечения прямой L и плоскости
M1(1;-3;4) L: (x+1)/2=(y-2)/-1=(z+2)/2 - каноническое уравнение прямой П:...

Как отметить точку пересечения прямой с осью х
Код программы: Private Sub Command1_Click() Dim i As Double Picture1.Scale...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru