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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите с курсовой!!!Горю!!!

Помогите с курсовой!!!Горю!!!

Ответ
Поиск в этой теме
Непрочитано 24.12.2007, 22:26 #1
Помогите с курсовой!!!Горю!!!
DsC
 
Регистрация: 24.12.2007
Сообщений: 9

Товарищи профессианали ЛИСПа. Пожалуйста помогите с курсовой. Лекции нам читали гадко и ничего вообще не понятно как писать. Но по формулировке задачи кажется, что программа должна быть не сложной, особенно для профи.
Вот формулировка задания:
На экране пользователем задается ломаная (командой LINE), состоящая из отрезков двух разных цветов. Написать программу, сглаживающую ломаную дугами окружностей трех возможных радиусов, определенных пользователем, в зависимости от цвета отрезков, составляющих угол (лишние кусочки отрезков ломаной после сглаживания должны быть удалены). Например, используются отрезки двух цветов: красные и синие. Пользователь задал три радиуса: Rl, R2, R3. Если угол составляют красные отрезки, необходимо сгладить его дугой радиуса R1, если угол составляют красный и синий отрезки - радиусом R2, если синие отрезка - радиусом R3. Замечание: при задании пользователем радиусов сопряжения необходимо проводить анализ их допустимости.

Если кому-то задачка покажется простой, напишите программку,аа...очень прошу=)
Просмотров: 6158
 
Непрочитано 25.12.2007, 08:32
#2
T-Yoke

Артиллерист - вертолётчик. Дипломированный инженер-механик. Technologist
 
Регистрация: 29.11.2004
Где-то около Москвы
Сообщений: 16,833
Отправить сообщение для T-Yoke с помощью Skype™


Цитата:
Сообщение от DsC Посмотреть сообщение
Т...по формулировке задачи кажется, что программа должна быть не сложной, особенно для профи.
Вот формулировка задания:
На экране пользователем задается ломаная (командой LINE), состоящая из отрезков двух разных цветов. Написать программу, сглаживающую ломаную дугами окружностей трех возможных радиусов, определенных пользователем, в зависимости от цвета отрезков, составляющих угол (лишние кусочки отрезков ломаной после сглаживания должны быть удалены). Например, используются отрезки двух цветов: красные и синие. Пользователь задал три радиуса: Rl, R2, R3. Если угол составляют красные отрезки, необходимо сгладить его дугой радиуса R1, если угол составляют красный и синий отрезки - радиусом R2, если синие отрезка - радиусом R3. Замечание: при задании пользователем радиусов сопряжения необходимо проводить анализ их допустимости.
...
И вот на такой бредятине учат наших студентов. Ужас!
__________________
«Артиллерия не токмо грохот, но и наука!» Пётр I
T-Yoke вне форума  
 
Непрочитано 25.12.2007, 09:35
#3
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,626


Для DsC.
Цитата:
Но по формулировке задачи кажется, что программа должна быть не сложной, особенно для профи.
А ведь профи не возьмется за какую попало задачу. Нужен хоть какой-нибудь мало-мальский смысл. Я вот еще далеко не профи, однако подобная задача вызывает у меня недоумение своей абстрактностью, неочевидностью прикладного назначения.
Profan вне форума  
 
Непрочитано 25.12.2007, 10:13
#4
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 311


Да-а, ужос чему учат. Помнится нам при изучении АвтоКАДа задали расчитать и начертить (скриптом или ЛИСПом) П-образный компенсатор в три линии со всеми размерами. И называлось это всего лишь типовым расчетом, хотя специальность совсем не программистская.

>> DsC
Честно скажу, что за такое не возьмусь, но пару рекомендаций дам (а то гуру сейчас появятся, такое в свой адрес услышиш ).
1. Главное. Правильная постановка задачи уже является половиной её решения.
2. Каким образом задаются отрезки? Команда LINE не прерывается, или это отдельные отрезки в произвольных местах?
3. Как задаётся цвет? Для каждого отрезка отдельно через свойства или по слою (отрезки на разных слоях)?
4. Как должен осуществляться выбор отрезков в программе? Наверное должно быть похоже на работу команды FILLET. Вот отсюда и пляши.
Олег К. вне форума  
 
Непрочитано 25.12.2007, 10:17
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


ИМХО: вся программа сводится к (command "_.fillet") с установлением радиуса. А радиус определять через (cond). Например, как-то так:
Код:
[Выделить все]
(defun test (/ *error* ent1 ent2 r1 r2 r3 r filletrad)
  (defun *error* (msg)
    (if filletrad
      (setvar "filletrad" filletrad)
      ) ;_ end of if
    (princ msg)
    (princ)
    ) ;_ end of defun

  (if
    (and (= (type (setq r1 (vl-catch-all-apply
                             '(lambda () (getreal "\nРадиус 1 <Отмена> : "))
                             ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
            'real
            ) ;_ end of =
         (= (type (setq r2 (vl-catch-all-apply
                             '(lambda () (getreal "\nРадиус 2 <Отмена> : "))
                             ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
            'real
            ) ;_ end of =
         (= (type (setq r3 (vl-catch-all-apply
                             '(lambda () (getreal "\nРадиус 3 <Отмена> : "))
                             ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
            'real
            ) ;_ end of =
         (= (type (setq ent1 (vl-catch-all-apply
                               '(lambda () (car (entsel "\nОтрезок 1 <Отмена> : ")))
                               ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
            'ename
            ) ;_ end of =
         (= (cdr (assoc 0 (entget ent1))) "LINE")
         (= (type (setq ent2 (vl-catch-all-apply
                               '(lambda () (car (entsel "\nОтрезок 2 <Отмена> : ")))
                               ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
            'ename
            ) ;_ end of =
         (= (cdr (assoc 0 (entget ent2))) "LINE")
         (setq r (cond
                   ((and (= (cdr (assoc 62 (entget ent1))) 1)
                         (= (cdr (assoc 62 (entget ent2))) 1)
                         ) ;_ end of and
                    r1
                    )
                   ((or (and (= (cdr (assoc 62 (entget ent1))) 5)
                             (= (cdr (assoc 62 (entget ent2))) 1)
                             ) ;_ end of and
                        (and (= (cdr (assoc 62 (entget ent1))) 1)
                             (= (cdr (assoc 62 (entget ent2))) 5)
                             ) ;_ end of and
                        ) ;_ end of or
                    r2
                    )
                   ((and (= (cdr (assoc 62 (entget ent1))) 5)
                         (= (cdr (assoc 62 (entget ent2))) 5)
                         ) ;_ end of and
                    r3
                    )
                   (t nil)
                   ) ;_ end of cond
               ) ;_ end of setq
         ) ;_ end of and
     (progn
       (setq filletrad (getvar "filletrad"))
       (setvar "filletrad" r)
       (command "_.fillet" ent1 ent2)
       (setvar "filletrad" filletrad)
       ) ;_ end of progn
     ) ;_ end of if
  ) ;_ end of defun
Опаньки, опередили И, между прочим, все верно сказали. В моем коде никаких проверок (кроме как на ошибки ввода) нет
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.12.2007, 10:20
#6
Елпанов Евгений

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


>Profan
Прикладное значение, всегда можно найти...
Как пример - трубопровод, если обозначать цветами, трубы различных диаметров, то и сопряжения в углах будут подбираться по похожему алгоритму.

>DsC
А задачка на плоскости или в объеме?
Елпанов Евгений вне форума  
 
Непрочитано 25.12.2007, 11:11
#7
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,626


Ну, значит, (с горестным вздохом) Алексей Кулик и Евгений Елпанов еще не профи.
А если серьезно, Алексей, ты уверен, что код будет понятен DsC?
Вот и Евгений задает такой вопрос, что кажется, будто задача для него слишком проста, не интересна, хочется усложнить.
Profan вне форума  
 
Непрочитано 25.12.2007, 11:32
#8
Елпанов Евгений

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


Цитата:
Сообщение от Profan Посмотреть сообщение
Вот и Евгений задает такой вопрос, что кажется, будто задача для него слишком проста, не интересна, хочется усложнить.
Я принципиально не использую ком строку, т.е. если бы взялся, написал бы все на чистой математике...
Елпанов Евгений вне форума  
 
Непрочитано 25.12.2007, 12:57
#9
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,626


Подумал немного над этой задачей. И пришел к выводу, что основную трудность для меня составляет определение максимально возможного радиуса сопряжения двух отрезков в зависимости от их длины и угла между ними. Решалась ли такая задача кем-нибудь? Поиском не нашел пока ничего. Но стало интересно.
Profan вне форума  
 
Непрочитано 25.12.2007, 13:33
#10
Елпанов Евгений

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


Цитата:
Сообщение от Profan Посмотреть сообщение
Подумал немного над этой задачей. И пришел к выводу, что основную трудность для меня составляет определение максимально возможного радиуса сопряжения двух отрезков в зависимости от их длины и угла между ними. Решалась ли такая задача кем-нибудь? Поиском не нашел пока ничего. Но стало интересно.
Это не сложно, если нарисовать...
Короче, есть два отрезка и они объединены сопрягающей дугой. Что можно сказать о дуге? Во первых, ее центр удален от обоих отрезков на радиус дуги, во вторых, ее угол, равен углу между отрезками, в третьих, начальный и конечные углы этой дуги, перпендикулярны отрезкам. Это только мысли в слух...

PS. мной эта задача решалась..
Елпанов Евгений вне форума  
 
Непрочитано 25.12.2007, 14:54
#11
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 311


Главное, чтобы код был понятен преподавателю .

Позволю себе внести некоторые добавки в предложенный код.
При определении цвета:
Код:
[Выделить все]
...
(setq r (cond
                   ((and (= (if (assoc 62 (entget ent1))
	                           (cdr (assoc 62 (entget ent1)))
	                           (cdr (assoc 62 (tblsearch "LAYER" (cdr (assoc 8 (entget ent1))))))
	                        )
                            1)
                           (= (if (assoc 62 (entget ent2))
	                           (cdr (assoc 62 (entget ent2)))
	                           (cdr (assoc 62 (tblsearch "LAYER" (cdr (assoc 8 (entget ent2))))))
	                       )
                           1)
                         ) ;_ end of and
                    r1
                    ) ...
И в качестве украшательства:
Код:
[Выделить все]
(if (vl-cmdf "_.fillet" ent1 ent2)
	(cond ; (раскраска дуги)
	  ((= r r1)
	     (setq fillarc (entget (entlast)))
	     (if (assoc 62 fillarc)
	       (entmod (subst (cons 62 1) (assoc 62 fillarc) fillarc))
	       (entmod (append fillarc (list (cons 62 1))))
	     )
	  ) ; r=r1
	  ((= r r2)
	     (setq fillarc (entget (entlast)))
	     (if (assoc 62 fillarc)
	       (entmod (subst (cons 62 6) (assoc 62 fillarc) fillarc))
	       (entmod (append fillarc (list (cons 62 6))))
	     )
	  ) ; r=r2
	  ((= r r3)
	     (setq fillarc (entget (entlast)))
	     (if (assoc 62 fillarc)
	       (entmod (subst (cons 62 5) (assoc 62 fillarc) fillarc))
	       (entmod (append fillarc (list (cons 62 5))))
	     )
	  ) ; r=r3
	) ; cond(раскраска дуги)
	(alert "Отрезки не могут быть сопряжены")
      ) ; if(command)

По поводу математики. Если я правильно понимаю, получив точку пересечения отрезков, отступаем от неё на радиус по каждому из отрезков - получаем точки пересечения отрезков с дугой сопряжения (= нач и кон точки дуги). Значит максимальный радиус сопряжения - это расстояние от точки пересечения отрезков до самой дальней точки наиболее короткого отрезка? (вот же выразился, надеюсь без картинки понятно будет).

Последний раз редактировалось Олег К., 25.12.2007 в 15:21.
Олег К. вне форума  
 
Непрочитано 25.12.2007, 15:00
#12
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


(command bla-bla-bla) вернет nil в любом случае. Так что "украшательства" не получится.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.12.2007, 15:19
#13
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,626


Точно:
Код:
[Выделить все]
 
Команда: (command bla-bla-bla)
*Прервано*
nil
Profan вне форума  
 
Непрочитано 25.12.2007, 15:24
#14
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 311


М-да, действительно . Тогда заменим (command ...) на (vl-cmdf ...).
Олег К. вне форума  
 
Непрочитано 25.12.2007, 15:24
#15
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Profan, (command "_.fillet" ent1 ent2) вернет nil в любом случае.
(в сторону): А автора не видно и не слышно
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.12.2007, 15:38
#16
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 311


Цитата:
А автора не видно и не слышно
Сгорел?
Олег К. вне форума  
 
Автор темы   Непрочитано 25.12.2007, 16:34
#17
DsC


 
Регистрация: 24.12.2007
Сообщений: 9


Автор вот он =)
Не ожидал такого количества ответов.
Хочется ответить всем и каждому, но вот только некоторые поправки:
Когда я еще пытался разобраться сам, то преподавательниЦА сказала:"Как задачу поставишь, так и будешь решать" и я подумал на счет того как задавать исходный чертеж...Чтоб не мучаться с поиском последовательных отрезков, создавать их каждый раз программно случайным образом последовательными LINEами со случайной длинной(в адекватных пределах)/ со случайными смещениями очередного конца и со случайным цветом...У пользователя спрашивать только количество отрезков и радиусы...на счет радиусов,кстати, ничего сказать не многу =(
Код действительно непонятен почти =( Преподавательница тоже не профи(она специалист широкого профиля - чего тока не преподает!!! и как следствие нормально не знает ничего) так что и ей он будет непонятен скорее всего.
Задача решается на плоскости конечно же...
На счет применимости данной задачи к жизни могу сказать одно - НИ ОДНА лабораторка ни по одному языку программирования не имела нормального жизненного приложения! Это меня тоже жутко бесит!
Все еще с надеждой жду рабочего варианта...
DsC вне форума  
 
Непрочитано 25.12.2007, 16:54
#18
Regby


 
Регистрация: 05.10.2007
р. Татарстан
Сообщений: 4,840


А где вас такому учат? И по какому предмету?
__________________
Категории - нет
Главспеца - нет
ГИПА - нет
Начальник - архитектор
Regby вне форума  
 
Непрочитано 25.12.2007, 17:06
#19
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 311


Ага, коллега. Мы тоже вместе с преподом AutoCAD изучали.
Теперь без шуток.
Разве предложенный вариант не рабочий?
Уже нужна вторая программа для рисования случайных отрезков? Может проще один раз нарисовать нужные отрезки, сохранить этот файл и работать с ним.

>> Кулик Алексей aka kpblc
Кто-то говорил про китайских мудрецов и удочки.
Олег К. вне форума  
 
Автор темы   Непрочитано 25.12.2007, 17:30
#20
DsC


 
Регистрация: 24.12.2007
Сообщений: 9


Цитата:
Сообщение от Regby Посмотреть сообщение
А где вас такому учат? И по какому предмету?
Московский институт электроники и математики =)
Предмет...чтоб не обмануть-то...официально кажется "Языки программирования искусственнного интеллекта"
DsC вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите с курсовой!!!Горю!!!



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ANSYS 10 Помогите разобраться. Aндрeй ANSYS 6 12.12.2007 00:03
помогите срочно пощитать теплопроводность стены Sanyok Конструкции зданий и сооружений 5 23.12.2005 11:15