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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Товарищи! помогите с лиспом

Товарищи! помогите с лиспом

Закрытая тема
Поиск в этой теме
Непрочитано 13.06.2007, 19:34 #1
Товарищи! помогите с лиспом
САПР
 
волжский
Регистрация: 20.02.2007
Сообщений: 14

доброго времени суток всем присутствующим. очень нужна ваша помощь. задачка по лиспу такова:
нужно написать програмку на лиспе, которая бы строила параболоид, потом делала бы его сечение.
далее мы задаем горизонтальную линию на определенной высоте от начала сечения параболоида (сечение просто в виде параболы - без штриховки), у нас строится горизонтальная линия на заданной высоте,
она пробегает само сечение и возвращает длину между точками, которые являются пересечением параболы и линии.
т.е. нам нужно получить расстояние м/у точками х1 и х2 (см. рисунок).
помогите пожалуйста с этой задачкой :cry: - буду очень признателен .
чтобы показать что я хоть чего то начинал делать-выкладываю лисп-код, который якобы строит сечение параболоида(см. файл)

ps: было бы замечательно построить синусоиду, затем задавать эту горизонтальную линию и получать не только результат м/у точками х1 и х2, но и м/у х3 и х4 и т.д., т.е. накапливать результаты пробега линии по синусоиде.(выводить результаты отдельно каждый требуется). кто сможет-помогите пожалуйста.

[ATTACH]1181748895.rar[/ATTACH]
Просмотров: 6906
 
Автор темы   Непрочитано 14.06.2007, 07:35
#2
САПР


 
Регистрация: 20.02.2007
волжский
Сообщений: 14


неужели никто не поможет? мне к 19-му уже нужно сдать. мож кто поможет,пожалуйста. т.е. такова задача: построить синусоиду с выбором количества витков. затем параллельно оси Х провести линию(как в +, так и -), которая задается с клавы. эта линия пробегает(||-ая х) нашу синусоиду и в местах пересечения синусоиды и линии - возвращает длину отрезка :cry: :cry: :cry: .буду очень признателен кто поможет .
ps: см. рисунок: нужно расстояние м/у х1 и х2; х3 и х4; и т.д.; помогите кто в силах это сделать- у меня к сожаленью ничего не выходит. :cry:
[ATTACH]1181792616.dwg[/ATTACH]
САПР вне форума  
 
Непрочитано 14.06.2007, 08:18
#3
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Классная у тебя синусоида получилась...
Что, обязательно в автокаде это решать?
Система уравнений:
y=sinx
y=0.5 (например для прямой)
Отсюда x=30, следующее пересечение при x=150, отсюда расстояние получается 120.
Цитата:
нужно расстояние м/у х1 и х2; х3 и х4; и т.д.;
Если это синусоида везде будет одинаково.
Krieger вне форума  
 
Непрочитано 14.06.2007, 09:12
#4
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Если это синусоида везде будет одинаково.
Вряд ли...
> Автору: насчет синусоиды попробуй такое:
Код:
[Выделить все]
(defun create-sin (/		  range		 step		x
		   spline_lst	  spline	 xline		gr
		   int		  res		 loc:addxline
		   _kpblc-conv-list-to-3dpoints	 counter
		   )


  (defun _kpblc-conv-list-to-3dpoints (lst / res)
				      ;|
*    Функция конвертации списка чисел в список 3-мерных точек.
*    Параметры вызова:
*	lst	список чисел
*    Примеры вызова:
(_kpblc-conv-list-to-3dpoints '(1 2 3 4 5 6)) ;-> ((1 2 3) (4 5 6))
(_kpblc-conv-list-to-3dpoints '(1 2 3 4 5))   ;-> ((1 2 3) (4 5 0.))
|;
    (cond
      ((not lst)
       nil
       )
      (t
       (setq res (cons (list (car lst)
			     (if (cadr lst)
			       (cadr lst)
			       0.
			       ) ;_ end of if
			     (if (caddr lst)
			       (caddr lst)
			       0.
			       ) ;_ end of if
			     ) ;_ end of list
		       (_kpblc-conv-list-to-3dpoints (cdddr lst))
		       ) ;_ end of cons
	     ) ;_ end of setq
       )
      ) ;_ end of cond
    res
    ) ;_ end of defun

  (defun loc:addxline (obj pt / res sec)
    (setq sec (list (+ (car pt) 1.) (cadr pt) (caddr pt)))
    (if	obj
      (progn
	(setq res obj)
	(vla-put-basepoint res (vlax-3d-point pt))
	(vla-put-secondpoint
	  res
	  (vlax-3d-point sec)
	  ) ;_ end of vla-put-SecondPoint
	) ;_ end of progn
      (setq res	(vla-addxline
		  (vla-get-modelspace
		    (vla-get-activedocument (vlax-get-acad-object))
		    ) ;_ end of vla-get-ModelSpace
		  (vlax-3d-point pt)
		  (vlax-3d-point sec)
		  ) ;_ end of vla-AddXline
	    ) ;_ end of setq
      ) ;_ end of if
    res
    ) ;_ end of defun

  (vl-load-com)
  (if
    (and
      (not (vl-catch-all-error-p
	     (vl-catch-all-apply
	       '(lambda	()
		  (setq	range (cond
				((getint "\nКоличество циклов <1> : "))
				(t 1)
				) ;_ end of cond
			) ;_ end of setq
		  ) ;_ end of lambda
	       ) ;_ end of vl-catch-all-apply
	     ) ;_ end of vl-catch-all-error-p
	   ) ;_ end of not
      range
      (not (vl-catch-all-error-p
	     (vl-catch-all-apply
	       '(lambda	()
		  (setq
		    step (cond ((getint "\nКоличество вершин на цикл <11> : "))
			       (t 11)
			       ) ;_ end of cond
		    ) ;_ end of setq
		  ) ;_ end of lambda
	       ) ;_ end of vl-catch-all-apply
	     ) ;_ end of vl-catch-all-error-p
	   ) ;_ end of not
      step
      ) ;_ end of and
     (progn
       (setq x 0.)
       (while (<= x (* 2. pi range))
	 (setq spline_lst (append spline_lst (list x (sin x) 0.))
	       x	  (+ x (/ (* 2. pi) step))
	       ) ;_ end of setq
	 ) ;_ end of while
       (setq spline (vla-addspline
		      (vla-get-modelspace
			(vla-get-activedocument (vlax-get-acad-object))
			) ;_ end of vla-get-modelspace
		      (vlax-make-variant
			(vlax-safearray-fill
			  (vlax-make-safearray
			    vlax-vbdouble
			    (cons 0 (1- (length spline_lst)))
			    ) ;_ end of vlax-make-safearray
			  spline_lst
			  ) ;_ end of vlax-safearray-fill
			) ;_ end of vlax-make-variant
		      (vlax-3d-point '(0. 0. 0.))
		      (vlax-3d-point '(0. 0. 0.))
		      ) ;_ end of vla-addspline
	     xline  (loc:addxline nil '(0. 0. 0.))
	     ) ;_ end of setq
       (while (= (car (setq gr (grread t 1 0))) 5)
	 (setq xline (loc:addxline xline (cadr gr)))
	 ) ;_ end of while
       (if (/= (car gr) 3)
	 (mapcar 'vla-erase (list xline spline))
	 (progn
	   (setq int (vlax-variant-value
		       (vla-intersectwith xline spline acextendnone)
		       ) ;_ end of vlax-variant-value
		 ) ;_ end of setq
	   (vla-erase xline)
	   (if (>= (vlax-safearray-get-u-bound int 1) 0)
	     (progn
	       (setq
		 int	 (_kpblc-conv-list-to-3dpoints (vlax-safearray->list int))
		 counter 0
		 ) ;_ end of setq
	       (repeat (1- (length int))
		 (setq res     (cons (distance (nth counter int) (nth (1+ counter) int))
				     res
				     ) ;_ end of cons
		       counter (1+ counter)
		       ) ;_ end of setq
		 ) ;_ end of repeat
	       (reverse res)
	       (mapcar '(lambda	(x)
			  (princ (strcat "\n" (vl-princ-to-string x)))
			  ) ;_ end of lambda
		       res
		       ) ;_ end of mapcar
	       ) ;_ end of progn
	     ) ;_ end of if
	   ) ;_ end of progn
	 ) ;_ end of if
       ) ;_ end of progn
     ) ;_ end of if
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.06.2007, 10:38
#5
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,825


Цитата:
Сообщение от Кулик Алексей aka kpblc
Цитата:
Если это синусоида везде будет одинаково.
Вряд ли...
[ATTACH]1181803132.jpg[/ATTACH]
Krieger вне форума  
 
Непрочитано 14.06.2007, 10:45
#6
Кулик Алексей aka kpblc
Moderator

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


А, черт... Промежуточные расстояния мерить не надо. Моя ошибка, сорри, недоглядел... Я-то имел в виду, что соседние значения расстояний могут и не совпадать.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.06.2007, 15:01
#7
vic153

проектировщик газопроводов
 
Регистрация: 04.08.2005
Петербург
Сообщений: 325


Здраствуйте уважаемые специалисты.
Помогите, пожалуйста, создать лисп
Дано: ломанная линия, в виде полилинии (LWPOLYLINE) заданна неотрицательной.
На входе: вводить любую координату X
На выходе: получить координату Y этой полилинии в координате X, если в координате X нет полилинии то тихий выход.
vic153 вне форума  
 
Непрочитано 14.06.2007, 15:17
#8
Кулик Алексей aka kpblc
Moderator

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


Ты сам-то понял чо спросил? Я, например, ни фига не понял.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.06.2007, 15:27
#9
vic153

проектировщик газопроводов
 
Регистрация: 04.08.2005
Петербург
Сообщений: 325


Представь у тебя есть график функции в виде ломаной линии y=f(x). Как этот график строится: отмечаются точки вершин и через них проводят прямые y=kx+b.
Полилиния ведь и задается координатами вершин.
А теперь берется любая X и если полилиния проходит через эту X необходимо получить координату Y.
В принципе алгоритм такой: необходимо получить список вершин полилинии и последовательно проверять входит ли X в диапазон абцисс полилинии и если входит получить Y

P.S. упс, нашел ошибку у себя в коде, теперь вроде работает. Но если люди скажут свое решение буду очень благодарен.
vic153 вне форума  
 
Непрочитано 14.06.2007, 15:27
#10
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Если по простому можно так
Код:
[Выделить все]
(defun c:test (/ rec-sin ang_min ang_max step y pt1 pt2)
  (defun rec-sin (x_var)
    (if (< x_var ang_max)
      (cons (list x_var (sin x_var)) (rec-sin (+ x_var step)))
    ) ;_ end of if
  ) ;_ end of defun
  (setq ang_min (/ (* pi (getreal "\nВведите начальный угол (в градусах): ")) 180.))
  (setq ang_max (+ ang_min (* 2 pi (getint "\nКоличество циклов: "))))
  (command "_zoom" "_w" (list ang_min 0.) (list ang_max 0.))
  (setq step (/ pi 20.))
  (command "_spline")
  (apply 'command (rec-sin ang_min))
  (command "" "" "")
  (setq pt1 (getpoint "\nПервая точка линии: "))
  (setvar "ORTHOMODE" 1)
  (setq pt2 (getpoint pt1 "\nВторая точка: "))
  (command "_line" pt1 pt2 "")
  (setq y (caddr (assoc 10 (entget (entlast)))))
  (princ
    (strcat "\nРасстояние: "
	    (rtos (- pi (* 2 (atan (/ y (sqrt (- 1 (* y y))))))) 2 4)
    ) ;_ end of strcat
  ) ;_ end of princ
  (princ)
) ;_ end of defun
Правда рекурсия (rec-sin) не всегда правильно возвращае конечную точку синусоиды, но я пока не соображу какое правильное условие нужно для выхода из рекурсии...
CB вне форума  
 
Непрочитано 14.06.2007, 15:36
#11
Кулик Алексей aka kpblc
Moderator

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


Это как же ты себе представляешь, что полилиния проходит через x? Она по идее проходит через точку, а у точки обязательно и y присутствует... Я вопроса никак понять не могу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.06.2007, 15:45
#12
vic153

проектировщик газопроводов
 
Регистрация: 04.08.2005
Петербург
Сообщений: 325


Цитата:
Сообщение от Кулик Алексей aka kpblc
Это как же ты себе представляешь, что полилиния проходит через x? Она по идее проходит через точку, а у точки обязательно и y присутствует... Я вопроса никак понять не могу.
Алексей, проходит не реально через точку (x,0), а в смысле имеет эту координату. Ведь может так статься что полилинии задана в интервале по X от 0 до 10, а ты запрашиваешь X=100 естественно никакой Y там не будет.

P.S. ну хоть теперь то понятно :roll:
vic153 вне форума  
 
Автор темы   Непрочитано 16.06.2007, 12:09
#13
САПР


 
Регистрация: 20.02.2007
волжский
Сообщений: 14


всем огромное спасибо. очень благодарен кто откликнулся.
в особенности товарищам Кулик Алексей aka kpblc,CB,Krieger.
САПР вне форума  
 
Непрочитано 25.06.2007, 11:29
#14
sersgey_r

Учусь писать прогри на лиспе
 
Регистрация: 15.06.2007
Таганрог
Сообщений: 8


Народ посмотрите код пожалуйста.
Вопрос такой,в коммандной строке такая команда работает

(setq ss1 (textbox ss)) и следующая за ней
(setq ss2 (car (cadr (ss1))))
а вставляю в ЛИСП и нифига пишет на это (setq ss1 (textbox ss)) nill
Подскажите что надо сделать??


Цитата:
(setq s (getstring (strcat "\nКЛЕММА <Выс " (rtos hg)"; Сж " (rtos scal)">:")))
(print s)
(setq ss (entget (entlast)))
(print ss)
(setq ss1 (textbox ss))
(print ss1)
(setq ss2 (car (cadr (ss1))))
(print ss2)

(setq ss3 10)
(setq deltaH (+ (/ hg 2) 1))
(setq deltaLLeft (+ (/ ss3 2) 2.5))
(setq deltaLRight (+ (/ ss3 2) 2.5))
sersgey_r вне форума  
 
Непрочитано 26.06.2007, 10:13
#15
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Надо бы для полноты знать что возвращает (entlast)
Вы VLisp отладчиком пользоваться научились? Это лучший помошник!
Евгений А. вне форума  
 
Непрочитано 26.06.2007, 10:20
#16
Кулик Алексей aka kpblc
Moderator

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


> Евгений А. : тема продолжилась на http://dwg.ru/forum/viewtopic.php?p=154834#154834
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.06.2007, 10:27
#17
sersgey_r

Учусь писать прогри на лиспе
 
Регистрация: 15.06.2007
Таганрог
Сообщений: 8


Цитата:
Сообщение от Евгений А.
Надо бы для полноты знать что возвращает (entlast)
Вы VLisp отладчиком пользоваться научились? Это лучший помошник!
я стараюсь . а с проблемой данной вроде бы разобрался, но теперь стоит проблема удаления текста чертежа. Текст был введен и должен быть удален. вот не знаю как это сделать
Цитата:
(setq sp (list 10.0 10.0))
(setq ss3 s)
(command "TEXT" "_J" "_M" sp 3.0 0 ss3)
sersgey_r вне форума  
 
Непрочитано 26.06.2007, 10:39
#18
Кулик Алексей aka kpblc
Moderator

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


Так, sersgey_r, хорош скакать по темам! Давай уж определись - где продолжается разговор - здесь или в параллельной теме.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.06.2007, 16:36
#19
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Цитата:
Сообщение от Кулик Алексей aka kpblc
> Евгений А. : тема продолжилась на http://dwg.ru/forum/viewtopic.php?p=154834#154834
Специально не смотрел эту тему из-за названия - Я в ЛИПАХ и прочих деревьях ничем помочь не могу!
Евгений А. вне форума  
 
Непрочитано 26.06.2007, 16:47
#20
Кулик Алексей aka kpblc
Moderator

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


А я даже и не заметил. Все подряд посты править я точно не буду
Кстати, sersgey_r, это намек
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Закрытая тема
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Товарищи! помогите с лиспом

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск