Почему так работает "_line" ? - Lisp

Узнай цену своей работы

Формулировка задачи:

Доброго всем времени суток!
Листинг программы
  1. (defun c:my_point ()
  2. (setq p1 (getpoint "\nââåäèòå áàçîâóþ òî÷êó:")) ;
  3. (setq p2 (polar p1 pi 100)) ; Çàäàåì êîîðäèíàòû òî÷êè p2
  4. (setq p3 (polar p2 (/ (- pi) 2) 100)) ;
  5. (command "_line" p1 p2 "") ; ðèñóåì ëèíèþ 1
  6. (setq line1 (entlast)) ; Çàïèñûâàåì èìÿ îáúåêòà
  7. (command "_line" p2 p3 "") ; ðèñóåì ëèíèþ 2
  8. (setq line2 (entlast)) ; Çàïèñûâàåì èìÿ îáúåêòà
  9. (setvar "FILLETRAD" 10) ; óñòàíàâëèâàåì ñèñòåìíóþ ïåðåìåííóþ ðàäèóñà
  10.  
  11. ;(command "_Fillet" line1 line2) ; Ñîïðÿæåíèå
  12.  
  13. )
Если я пишу

(command "_line" p1 p2 p3 "")

то проблем нет, рисует горизонталь и далее перпендикулярно вниз. Все логично и как нужно, но если я рисую линии отдельно:

(command "_line" p1 p2 "")

(command "_line" p2 p3 "")

то вторая (перпендикулярная) линия начинается из середины горизонтальной и идет под углом к точке p3. Что не так?
Решил эту проблему переставлением координат местами, в итоге с сопряжением снова не то что то.. Не могу понять почему?
Листинг программы
  1. (defun c:my_point ()
  2. (setq p1 (getpoint "\nââåäèòå áàçîâóþ òî÷êó:")) ;
  3. (setq p2 (polar p1 pi 100)) ; Çàäàåì êîîðäèíàòû òî÷êè p2
  4. (setq p3 (polar p2 (/ (- pi) 2) 100)) ; Çàäàåì êîîðäèíàòû òî÷êè p3
  5. (setq p4 (polar p3 0 100)) ; Çàäàåì êîîðäèíàòû òî÷êè p3
  6. (command "_line" p1 p2 "") ; ðèñóåì ëèíèþ 1
  7. (setq line1 (entlast)) ; Çàïèñûâàåì èìÿ îáúåêòà
  8. (command "_line" p3 p2 "") ; ðèñóåì ëèíèþ 2
  9. (setq line2 (entlast)) ; Çàïèñûâàåì èìÿ îáúåêòà
  10.  
  11. (command "_line" p4 p1 "") ; ðèñóåì ëèíèþ 1
  12. (setq line3 (entlast)) ; Çàïèñûâàåì èìÿ îáúåêòà
  13. (command "_line" p4 p3 "") ; ðèñóåì ëèíèþ 2
  14. (setq line4 (entlast)) ; Çàïèñûâàåì èìÿ îáúåêòà
  15.  
  16. (setvar "FILLETRAD" 10) ; óñòàíàâëèâàåì ñèñòåìíóþ ïåðåìåííóþ ðàäèóñà
  17.  
  18. (command "_Fillet" line1 line2) ; Ñîïðÿæåíèå
  19. (command "_Fillet" line3 line4) ; Ñîïðÿæåíèå
  20. (command "_Fillet" line2 line3) ; Ñîïðÿæåíèå
  21. (command "_Fillet" line1 line4) ; Ñîïðÿæåíèå
  22.  
  23. )
Задача нарисовать квадрат с сопряжением в углах =5

Решение задачи: «Почему так работает "_line" ?»

textual
Листинг программы
  1. (defun C:MYPOINT ( / *error* osm blm cme flt p1 p2 p3 p4 )
  2.  
  3.   (defun *error* (msg)
  4.    ; Восстанавливаем системные переменные osmode , blipmode , cmdecho
  5.     (setvar 'osmode osm)
  6.     (setvar 'blipmode blm)
  7.     (setvar 'cmdecho cme)
  8.     (setvar 'filletrad flt)
  9.     (princ)
  10.   )
  11.  
  12.   ;; Запоминаем и обнуляем системные переменные osmode , blipmode , cmdecho
  13.   (setq osm (getvar 'osmode))
  14.   (setq blm (getvar 'blipmode))
  15.   (setq cme (getvar 'cmdecho))
  16.   (setq flt (getvar 'filletrad))
  17.  
  18.   ;; Задаем координаты точки p1
  19.   (setq p1 (getpoint "\nВведите базовую точку:"))
  20.                    
  21.   (setq p2 (polar p1 pi 100))           ; Задаем координаты точки p2
  22.   (setq p3 (polar p2 (/ (- pi) 2) 100)) ; Задаем координаты точки p3
  23.   (setq p4 (polar p3 0 100))            ; Задаем координаты точки p3
  24.  
  25.   (setvar 'cmdecho  0)
  26.   (setvar 'osmode   0)
  27.   (setvar 'blipmode 0)
  28.  
  29.   (command "_line" p1 p2 "")        ; рисуем линию 1
  30.   (setq line1 (entlast))        ; Записываем имя объекта
  31.  
  32.   (command "_line" p2 p3 "")        ; рисуем линию 2
  33.   (setq line2 (entlast))        ; Записываем имя объекта
  34.  
  35.   (command "_line" p3 p4 "")        ; рисуем линию 3
  36.   (setq line3 (entlast))        ; Записываем имя объекта
  37.  
  38.   (command "_line" p4 p1 "")        ; рисуем линию 4
  39.   (setq line4 (entlast))        ; Записываем имя объекта
  40.  
  41.   (setvar 'filletrad 10)       ; устанавливаем системную переменную радиуса
  42.  
  43.   (command "_Fillet" line1 line2)   ; Сопряжение
  44.   (command "_Fillet" line2 line3)   ; Сопряжение
  45.   (command "_Fillet" line3 line4)   ; Сопряжение
  46.   (command "_Fillet" line4 line1)   ; Сопряжение
  47.  
  48.  
  49.  (*error* nil)
  50.  
  51. )

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут