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

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

Где ошибка в коде отрисовки синусовой антенны

Ответ
Поиск в этой теме
Непрочитано 11.02.2025, 14:02 #1
Где ошибка в коде отрисовки синусовой антенны
slivonn
 
Регистрация: 11.02.2025
Сообщений: 3

Моя цель отрисовать синусувую антенну через алгоритм, написанный на lisp.

На выходе такая ошибка ; error: bad argument type: numberp: nil

Прошу помочь разобраться где в коде ошибка.

(defun c:slivonn ()
(prompt "Routine to draw the basic sinuous curve ") (terpri)
(setq start (getpoint "Pick the start point ")) (terpri)
(setq r1 (getreal "Enter the minimum radius ")) (terpri)
(setq r2 (getreal "Enter the maximum radius ")) (terpri)
(setq s (getreal "Enter the incremental step ")) (terpri)
(setq tau (getreal "Enter the value of tau ")) (terpri)
(while (< r1 (- r2 s))
(setq f1 (* (/ pi 4) (sin (* pi (/ (log (/ r1 r2)) (log tau))))))
(setq x1 (+ (* r1 (cos f1)) (car start)))
(setq y1 (+ (* r1 (sin f1)) (cadr start)))
(setq r1 (+ r1 s))
(setq f2 (* (/ pi 4) (sin (* pi (/ (log (/ r 1 r2)) (log tau))))))
(setq x2 (+ (* r1 (cos f2)) (car start)))
(setq y2 (+ (* r1 (sin f2)) (cadr start)))
(command "line"
(setq p (list x1 y1))
(setq p (list x2 y2))
""
)
)
)
Просмотров: 822
 
Непрочитано 11.02.2025, 16:05
#2
Кулик Алексей aka kpblc
Moderator

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


Загони в VLIDE, поставь точку останова и смотри, какие значения в каких переменных
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.02.2025, 16:20
#3
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Или обратитесь к автору программы Donald G. Stone из National Radio Astronomy Observatory)

----- добавлено через ~22 мин. -----
кстати, из первоисточника код запустился без проблем, только надо локализовать команду "_line". Ну и переменные локальными сделать желательно.
Сергей812 вне форума  
 
Автор темы   Непрочитано 11.02.2025, 16:52
#4
slivonn


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


Благодарю за ответы!
Сергей812, код у меня тоже запустился, но с ошибкой. Как вы нашли первоисточник уж не спрашиваю))
Правильно ли понимаю, что локализовать line означает изменить её имя на _line? Акад при обращении командой _line запускает штатную.
Что означает сделать локальными переменные?

Кулик Алексей aka kpblc попробую, спасибо.
slivonn вне форума  
 
Непрочитано 11.02.2025, 17:00
#5
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


у меня без ошибок выполнилось после локализации line, но видимо неправильные параметры ввел - поскольку ничего не нарисовало)

----- добавлено через ~16 мин. -----
Цитата:
Сообщение от slivonn Посмотреть сообщение
Что означает сделать локальными переменные?
(defun c:%Имя команды%( /start r1 r2 и т.д.)
Сергей812 вне форума  
 
Непрочитано 11.02.2025, 20:24
#6
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,808


Цитата:
Сообщение от slivonn Посмотреть сообщение
где в коде ошибка
r 1 -> r1
Миниатюры
Нажмите на изображение для увеличения
Название: SA.jpg
Просмотров: 41
Размер:	60.8 Кб
ID:	266739  
__________________
K Lisp
koMon вне форума  
 
Непрочитано 11.02.2025, 20:34
#7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


да и конструкции
Цитата:
Сообщение от slivonn Посмотреть сообщение
(setq p (list x1 y1))
явно излишние
Код:
[Выделить все]
 (command "_line" (list x1 y1) (list x2 y2) "")
Сергей812 вне форума  
 
Непрочитано 12.02.2025, 07:44
#8
name02


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


Еще хочу отметить, что построение кривой начинается не с указанной пользователем точки:
Код:
[Выделить все]
 (while (< r1 (- r2 s))
   (setq f1 (* (/ pi 4) (sin (* pi (/ (log (/ r1 r2)) (log tau))))))
   ;; при определении координат даже на первой итерации идет смещение
   (setq x1 (+ (* r1 (cos f1)) (car start)))
   (setq y1 (+ (* r1 (sin f1)) (cadr start)))
   ...
)

Может это и не важно...
name02 вне форума  
 
Автор темы   Непрочитано 12.02.2025, 08:25
#9
slivonn


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


Благодарю всех откликнувшихся!
Помогло сообщение koMon, дело было в синтаксической ошибке.
У меня отрисовывает. У кого нет, возможно из за значения тау, оно должно быть менее 1.
Как отблагодарить?
slivonn вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Где ошибка в коде отрисовки синусовой антенны



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Ошибка в коде - не могу найти. La Persona LISP 7 26.03.2018 16:35
Ошибка в коде cant find project or library Sub CodificatorCheck()(проверка на ошибки ) Piter81 Программирование 1 14.01.2016 22:22
Несоответствие результатов в Лире s.vas Лира / Лира-САПР 19 11.11.2009 07:31
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47