| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Ответ
Поиск в этой теме
Непрочитано 20.07.2008, 20:12
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,980

Со школы не ладится у меня с программированием. Все предметы щелкал, а на экзамене по информатике (Visual foxpro) программку типа суммирования столбцов списал у соседа (это уже в университете).
Не смотря на эте намерен научится писать программы для Автокада на лиспе, скачал книгу Хювенена, несколько примеров создания программ, но после получасового “смотрения” таких книг мое мышление явно притормаживает.
Решил пойти другим путем.
Нашел самый короткий лисп из моей коллекции, и прошу программистов с этого форума пошагово объяснить какой символ что означает. Надеюсь на вашу помощь.


Код:
[Выделить все]
(defun c:make-blocks-explodeable (/ adoc)
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (vlax-for blk_def (vla-get-blocks adoc)
    (if (and (equal (vla-get-isxref blk_def) :vlax-false)
             (equal (vla-get-islayout blk_def) :vlax-false)
             ) ;_ end of and
      (vl-catch-all-apply '(lambda () (vla-put-explodable blk_def :vlax-true)))
      ) ;_ end of if
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
_____________________________________________________________________________________________________________

Прошло много лет и топик теперь представляет из себя площадку для обучения азов программирования для многих начинающих.
Так что начинающие лиспогрызы приветствуются .
__________________
Блог

Последний раз редактировалось Red Nova, 12.07.2017 в 05:43.
Просмотров: 1972882
 
Непрочитано 22.05.2011, 13:14
#1501
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Владимир Егорьев Посмотреть сообщение
А как-нибудь виртуальную биссектрису угла можно сделать,аналогично виртуальной точки BT?
Для этого нужно вычислить виртуальный угол
gomer вне форума  
 
Непрочитано 22.05.2011, 13:24
#1502
Владимир Егорьев


 
Сообщений: n/a


Нет,ну это безусловно.А вот как задать виртуальную биссектрису относительно которой зеркалить?Или нарисовать линию с последующим её удалением?

Добавлено.

Угол то будет как раз между левой стороной первой основной грани и правой стороной последней основной грани.Отсчёт граней соответственно слева направо.
 
 
Непрочитано 22.05.2011, 13:37
#1503
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


ну так сложите эти углы и разделите на два это будет нужный угол, расстояние любое больше нуля
gomer вне форума  
 
Непрочитано 22.05.2011, 13:45
#1504
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от gomer Посмотреть сообщение
ну так сложите эти углы и разделите на два это будет нужный угол, расстояние любое больше нуля
Советую быть по аккуратнее с такими кодами! Допустим один угол равен 350 градусов, а второй 10. В данном случае, нужно получить угол без направления, в общем случае, все может быть сложнее...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 22.05.2011, 14:12
#1505
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
Советую быть по аккуратнее с такими кодами!
ну, так есть же еще опорные точки
gomer вне форума  
 
Непрочитано 22.05.2011, 15:17
#1506
Владимир Егорьев


 
Сообщений: n/a


Елпанов Евгений & gomer

Если я правильно понял Елпанов Евгений-он обратил внимание на то что алгоритм кода не исключает возможностей вводить в качестве исходных данных углы отличные от 360 градусов,которые подразумевают не только отрисовку развёрток закмкнутого многогранного профиля.
Это качественное замечание если я его всё таки правильно понял.
Действительно я предпологал ещё и этим же кодом выполнять развёртки так называемых обечаек из которых будут собираться замкнуты профиля.
Но я пока до этого не дошёл.
 
 
Непрочитано 22.05.2011, 15:25
#1507
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


я только хотел показать:
(350 + 10) / 2 = 180
но если нарисовать две линии, одна под углом 350, а другая 10 градусов, то луч - вектор, будет направлен под углом 0 градусов.
Другими словами, в некоторых случаях, результат выдает угол для обратного вектора.

Подобная ошибка, очень часто сильно выматывает начинающих программистов - есть код, он почти всегда работает верно, но иногда дает совершенно не верные результаты. Ошибка в сравнении углов или получении направления (угла), после простейших математических действий не вызывающих сомнений!
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 22.05.2011, 16:00
#1508
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Ошибка в сравнении углов или получении направления (угла), после простейших математических действий не вызывающих сомнений!
ну, да... тут подход индивидуальный...

Последний раз редактировалось gomer, 22.05.2011 в 16:08.
gomer вне форума  
 
Непрочитано 22.05.2011, 16:05
#1509
Владимир Егорьев


 
Сообщений: n/a


Елпанов Евгений

Вы извините,но я не очень Вас понял.

Хотя.....
Вот появились первые признаки неправильности mirrora.Возможно это то что вы описывали.
 
 
Непрочитано 22.05.2011, 16:17
#1510
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Владимир Егорьев Посмотреть сообщение
Вы извините,но я не очень Вас понял.
нарисовал, как смог...

180 не равно 0
Миниатюры
Нажмите на изображение для увеличения
Название: 1.GIF
Просмотров: 68
Размер:	3.8 Кб
ID:	60093  
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 22.05.2011, 16:26
#1511
Владимир Егорьев


 
Сообщений: n/a


Елпанов Евгений

Вы меня предостерегаите о том что угол в 10 градусов по часовой стрелки от оси Х-это ни есть 10 градусов,а 350?
 
 
Непрочитано 22.05.2011, 16:28
#1512
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


как есть 24часовая система отсчета времени и 12часовая так и здесь нужно приводить все к диапазону [-пи +пи] тогда разногласий не возникнет...
gomer вне форума  
 
Непрочитано 22.05.2011, 16:32
#1513
Владимир Егорьев


 
Сообщений: n/a


gomer

Соответственно

Будем считать что я понял мысль Елпанов Евгений
 
 
Непрочитано 22.05.2011, 17:47
#1514
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


пример задачи:
Код:
[Выделить все]
;; есть треугольник A B C
;; необходимо найти точку P
;; лежащую от вершины B на расстоянии 1 мм
;; и равноудаленную от сторон AB AC
;; есть треугольник A B C
;; необходимо найти точку P
;; лежащую от вершины B на расстоянии 1 мм
;; и равноудаленную от сторон AB AC

;; решение приведеным выше алгоритмом:
(defun test (a b c)
 (mapcar '(lambda (a b) (entmakex (list '(0 . "line") (cons 10 a) (cons 11 b))))
         (list a b c)
         (list b c a)
 )
 (entmakex (list '(0 . "point") (cons 10 (polar b (/ (+ (angle b a) (angle b c)) 2.) 1.))))
)

(test '(0 0) '(5 5)'(5 -5)) ;; точка внутри треугольника

(test '(5 5) '(0 0)'(5 -5)) ;; точка снаружи треугольника
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 26.05.2011, 13:23
#1515
Ubivec81

проектирование железных дорог
 
Регистрация: 12.04.2010
Самара
Сообщений: 60
<phrase 1=


Здравствуйте!
Раз уж тут тема для чайников может кто то научит строить полилинию по списку? Везде где читал есть коды для этого но хочется понять как все это устроено. Скажем так: у меня есть список "i" с элементами типа ((100.0 10.0) (110.0 12.0) (120.0 13.0)) нужно нарисовать полилинию через три точки не замкнув ее. количество элементов в списке может меняться в зависимости от того сколько их будет вводить пользователь. Если есть возможность то в объяснении не применять "VL".
Ubivec81 вне форума  
 
Непрочитано 26.05.2011, 13:53
#1516
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Сообщение от Ubivec81 Посмотреть сообщение
Здравствуйте!
Раз уж тут тема для чайников может кто то научит строить полилинию по списку? Везде где читал есть коды для этого но хочется понять как все это устроено. Скажем так: у меня есть список "i" с элементами типа ((100.0 10.0) (110.0 12.0) (120.0 13.0)) нужно нарисовать полилинию через три точки не замкнув ее. количество элементов в списке может меняться в зависимости от того сколько их будет вводить пользователь. Если есть возможность то в объяснении не применять "VL".
Код:
[Выделить все]
 
(setq i (list '(100.0 10.0) '(110.0 12.0) '(120.0 13.0)))
(apply 'command (append (list "_.pline") i (list "")))
или так

Код:
[Выделить все]
 
(setq i (list '(100.0 10.0) '(110.0 12.0) '(120.0 13.0)))
(entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length i))) (mapcar '(lambda(x) (cons 10 x)) i)))
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 26.05.2011, 15:52
#1517
Ubivec81

проектирование железных дорог
 
Регистрация: 12.04.2010
Самара
Сообщений: 60
<phrase 1=


TararykovDG, а как насчет научить?:-)
Все заработало отлично именно так как я хотел! но честно говоря сидел и разбирал код в первом примере и никак не могу своими мозгами дойти как это понять ....
Код:
[Выделить все]
 (apply 'command (append (list "_.pline") i (list "")))
вот это в целом я понял , НО если глядеть на него целиком а если рассмотреть
Код:
[Выделить все]
 (append (list "_.pline") i (list ""))
то тут я ни как не пойму что за запись. То что это сливание в один список понятно, но как туда попадают и что делают "List" "_.Pline" и ч то такое (list "") я понять не могу! Прошу пояснения.

Последний раз редактировалось Ubivec81, 26.05.2011 в 16:25.
Ubivec81 вне форума  
 
Непрочитано 26.05.2011, 18:41
#1518
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Цитата:
Прошу пояснения
Команда pline с клавиатуры работает примерно так: _pline точка1 точка2 .... точкаN "", где последние кавычки обозначают, что больше точек нет и можно завершить выполнение команды.
Append собирает в список последовательность для команды pline, т.е получаем тоже, что и выше но в виде списка.
Apply заставляет применить функцию (у нас это Command) к списку, который был получен выше.
alex8888 вне форума  
 
Непрочитано 27.05.2011, 07:42
#1519
Ubivec81

проектирование железных дорог
 
Регистрация: 12.04.2010
Самара
Сообщений: 60
<phrase 1=


alex8888, а list тут зачем да при чем 2 раза?
Ubivec81 вне форума  
 
Непрочитано 27.05.2011, 08:42
#1520
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


С помощью list мы даем указание на то, что все, что стоит после него считается списком. Не беда, что это всего лишь название команды или двойные кавычки. В целом получится именно тот список, что нам нужен.
Если бы в условии было определенное количество точек для полилинии, то выражение упростилось бы до одного list, хотя там вообще все будет просто и без наворотов типа append и apply.
alex8888 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу)

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46