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

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

Програмка построения дуги по длине хорды и длине дуги

Ответ
Поиск в этой теме
Непрочитано 19.01.2011, 11:00 #1
Програмка построения дуги по длине хорды и длине дуги
b_anton
 
Конструктор
 
Омск
Регистрация: 19.06.2008
Сообщений: 35

(princ "Новая функция: mLR")
(defun C:MLR ( / p1 p2 LenArc LenHord k i kx ky diff Rad)
(setq p1 (getpoint "\n Укажите первую точку хорды:"))
(setq p2 (getpoint p1 "\n Укажите вторую точку хорды:"))
(command "_PLINE" p1 p2 "")
(setq LenHord (distance p1 p2))
(initget 7)
(setq LenArc (getdist "\Укажите длину дуги: "))
(if (< LenArc LenHord)
(princ "\n Длина дуги меньше длины хорды!")
(progn
(setq k (/ LenHord (* 2 LenArc)))
(setq i 0.5)
(while (< i 180)
(setq kx (sin (/ (* i Pi) 360)))
(setq ky (/ (* k i Pi) 180))
(setq diff (abs (- (rtos kx 2 6) (rtos ky 2 6))))
(If (< diff 0.0000001) (progn
(setq Rad (/ LenHord (* 2 (sin (/ (* i Pi) 360)))))
(command "_arc" p1 (progn
(command "_e" p2)
(command "_r" Rad));end progn
);end command
(setq i 180)
);end progn
(setq i (+ 0.0001 i))
);end if
);end while
);end progn
);end if
(princ)
);end defun

Нужна помощь!
Пишет следующее ; ошибка: неверный тип аргумента: numberp: "0.004363"
Может кто подскажет как правильно округлить переменные кх и кy
Просмотров: 6546
 
Непрочитано 19.01.2011, 11:23
#2
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от b_anton Посмотреть сообщение
(- (rtos kx 2 6) (rtos ky 2 6))

rtos

real to string
(вещественное число в строку)
А аргументами функции вычитания - не могут быть строки
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 19.01.2011, 11:26
#3
b_anton

Конструктор
 
Регистрация: 19.06.2008
Омск
Сообщений: 35


тогда каким способом округлить?
b_anton вне форума  
 
Непрочитано 19.01.2011, 11:35
#4
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от b_anton Посмотреть сообщение
тогда каким способом округлить?
Зачем?
А вообще вот так, до 6 знаков после запятой
Код:
[Выделить все]
(setq kx (/ (fix (* 1000000 kx)) 1000000.0))
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 19.01.2011, 11:49
#5
b_anton

Конструктор
 
Регистрация: 19.06.2008
Омск
Сообщений: 35


Спасибо! без округления прога считает не корректно при некоторых заданных параметрах
b_anton вне форума  
 
Автор темы   Непрочитано 19.01.2011, 15:33
#6
b_anton

Конструктор
 
Регистрация: 19.06.2008
Омск
Сообщений: 35


доработанный код

;*************** mLR.lsp *************************************************
;Построение дуги по заданным параметрам
;-------------------------------------------------------------------------
;Параметры:
;P1, P2 — начальная и конечная точка хорды
;LenArc — длина дуги
(princ "Новая функция: mLR")
(defun C:MLR ( / p1 p2 LenArc LenHord k i kx ky diff Rad)
(setq p1 (getpoint "\n Укажите первую точкку хорды:"))
(setq p2 (getpoint p1 "\n Укажите вторую точку хорды:"))
(setq LenHord (distance p1 p2))
(initget 7)
(setq LenArc (getdist "\Укажите длину дуги: "))
(if (< LenArc LenHord)
(princ "\n Длина дуги меньше длины хорды!")
(progn
(setq k (/ LenHord (* 2 LenArc)))
(setq i 0.5)
(while (<= i 180)
(setq kx (sin (/ (* i Pi) 360)))
(setq ky (/ (* k i Pi) 180))
(setq diff (abs (- (/ (fix (* 1000000 kx)) 1000000.0) (/ (fix (* 1000000 ky)) 1000000.0))))
(If (< diff 0.0000001) (progn
(setq Rad (/ LenHord (* 2 (sin (/ (* i Pi) 360)))))
(command "_arc" p1 (progn
(command "_e" p2)
(command "_r" Rad));end progn
);end command
(setq i 180)
);end progn
(setq i (+ 0.0001 i))
);end if
);end while
);end progn
);end if
(princ)
);end defun

Важно: Прога строит дуги по стягивающим углам от 0,5 до 180 град! Не удивляйтесь если для построения дуги с углом порядка 175 град придется немного подождать, т.к. проверка углов происходит с шагом 0,0001 град. Разница длины построенной дуги от введенного значения тысячные доли милиметра. Если по введенным параметрам дуга расчитывается с углом больше 180, она не строится и прога просто завершает работу. На этот случай никакого сообщения не выводится!

Рекомендации по доработке приветствуются

Последний раз редактировалось b_anton, 20.01.2011 в 06:21.
b_anton вне форума  
 
Непрочитано 20.01.2011, 09:31
#7
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от b_anton Посмотреть сообщение
Рекомендации по доработке приветствуются
Сразу (без цикла) вычислить радиус и центр дуги (тригонометрия).
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 20.01.2011, 10:28
#8
b_anton

Конструктор
 
Регистрация: 19.06.2008
Омск
Сообщений: 35


насколько мне известно в тригонометрии нет единой формулы которая бы связывала хорду длину дуги и радиус....
b_anton вне форума  
 
Непрочитано 20.01.2011, 11:01
#9
Елпанов Евгений

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


b_anton, воспользуйся примерами
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 20.01.2011, 19:03
#10
gomer

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


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
b_anton, воспользуйся примерами
Примеры в общем то не подходят в данном случае... или я что-то пропустил?
gomer вне форума  
 
Непрочитано 20.01.2011, 20:40
#11
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от b_anton Посмотреть сообщение
насколько мне известно в тригонометрии нет единой формулы которая бы связывала хорду длину дуги и радиус....
Тригонометрия (открывать в IE)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 21.01.2011, 06:45
#12
b_anton

Конструктор
 
Регистрация: 19.06.2008
Омск
Сообщений: 35


Парни спасибо за полезную информацию
b_anton вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Програмка построения дуги по длине хорды и длине дуги

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение дуги по хорде и длине дуги. Verba AutoCAD 1 28.10.2009 13:29
Програмка для рисования дуги эллипса solo123 Программирование 1 05.10.2009 16:43