|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Всем привет! Подскажите как правильно ввести точку. Никак не могу понять. Лисп прилагаю
(defun C:OTV (/ D Rdug x1 y1) (initget 7) (setq P1 (getpoint '(list x1 y1) "\nНачальная точка:")) (setq D (getdist "\nДиаметр отвода:")) (setq Rdug (getdist "\nРадиус отвода:")) (setq Rv (- Rdug (* 0.5 D))) (setq Rn (+ Rdug (* 0.5 D))) (setq P1 (list x1 y1)) (setq y2 (+ y1 (* 0.5 D))) (setq y4 (- (* 0.5 D) y1)) (setq P2 (list x1 y2)) (setq P3 (list Rv (+ Rv (* 0.5 D)))) (setq P4 (list Rdug (+ Rv (* 0.5 D)))) (setq P5 (list Rn (+ R (* 0.5 D)))) (setq P6 (list x1 y4)) (command "_.Pline" P1 P2 P3 P4 P5 P6 "_cl") (command "_.zoom" "_e") (princ) ) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,425
|
Может, надо как-то так (особо в логику не вникал):
Код:
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
(setq x1 100.0 y1 0.0) И только потом как-то использовать. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
А если я не знаю какими будут координаты? Нужно чтобы они были произвольными, указал точку на поле чертежа, вот и координаты точки P1(x1;y1). Вот я и хочу, указать начальную точку и потом с помощью quote вернуть значения x1;y1. А в твоем выражении (setq x1 100.0 y1 0.0) - 100.0 и 0.0 это координаты x1 и y1?
|
|||
![]() |
|
||||
Проектировщик СС Регистрация: 24.06.2008
Минск
Сообщений: 134
![]() |
Тебе ж писал ShaggyDoc, что переменые до использования должны быть определены.
Функция (getpoint) возвращает кординаты точки, например '(10 10 0), что ты будешь с ними делать зависит от тебя. Если ты имел в виду, что в x1 должна автоматом попасть координата x, а в y1 - y, то это не так. Код:
P.S. И вообще: '(x1 y1)->'(x1 y1), чтобы получить точку надо определить x1 и y1, а затем использовать (list x1 y1). Знак '(...) запрещает вычисление стоящей за ним функции и эквивалентен (quote (...)), см. справку. В свою очередь функция (list [] ...) формирует список из аргументов. Последний раз редактировалось Donhuan, 31.01.2009 в 16:47. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Рyslan, срочно садись за азбуку. Выделяешь getpoint и жмешь Ctrl+F1. И внимательно изучаешь описание функции.
Если тебе надо получить в переменную с именем P1 значение начальной точки, то надо (setq P1 (getpoint "\nНачальная точка: ")) - без всяких (list x1 y1). Если потом, на кой-то черт, понадобится разделить эту точку (список) на её ординаты, то сделаешь (setq x1 (car p1) y1 (cadr p1)) Но и этого (значений отдельных ординат) в твоей задаче вообще не надо. Любые точки от известной можно получить функцией polar. Жми F1 почаще. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Пробовал я использовать Polar, ничерта не получается, в декартовых координатах проще посчитать. А этот Polar, насколько я понял расстояние между точками задает и угол между расстоянием и проекцией на ось икс. а где я возьму расстояние, тем более оно не точное. ну квадрат я так нарисовал, а дальше чота никак. Да есть у меня книженция, туда и смотрю. примеров маловато только
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Ось трубы, к которой приделывается отвод, может быть направлена под любым углом. Сам отвод может быть направлен влево и вправо, вперед и назад. Может быть с разными центральными углами и с разными радиусами. Да и рисовать его надо полилинией с дугами. Начинать надо на бумажке. Набросай эскиз - под углом, проставь номера точек и прикинь, как высчитать координаты всех точек, если известна координата начальной точки и направление трассы. А вот направление запрашивать надо обязательно. Потом выяснить - в какую сторону направить. Радиус и диаметр как раз спрашивать незачем - это могут быть аргументы функции рисования. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
ShaggyDoc, вроде разобрался с polar. Построил отвод в одном положении. А вот как его сориентировать? И потом, у меня там углы постоянные. Какая то зависимость наверное должна быть от начального угла привязки и углов отвода, хммм
(defun C:OTV (/ P1 P2 P3 P4 P5 P6 D Rdug) (initget 7) (setq P1 (getpoint "\nНачальная точка:")) (setq D (getdist "\nДиаметр отвода:")) (setq Rdug (getdist "\nРадиус отвода:")) (setq Rv (- Rdug (* 0.5 D))) (setq Rn (+ Rdug (* 0.5 D))) (setq Dist1 (sqrt (* 2 Rv Rv))) (setq Dist2 (sqrt (* 2 Rn Rn))) (setq P2 (polar P1 (* 0.5 pi) (* 0.5 D))) (setq P3 (polar P2 (* 0.25 pi) Dist1)) (setq P4 (polar P3 0 (* 0.5 D))) (setq P5 (polar P4 0 (* 0.5 D))) (setq P6 (polar P5 (* 1.25 pi) Dist2)) (Command "_.PLine" P1 P2 "_A" "_R" Rv P3 "_L" P5 "_A" "_R" Rn "_ANG" -90 P6 "_L" P1 "_A" "_R" Rdug P4 "" "_E") (command "_.zoom" "_e") (princ) ) |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Рyslan, вот я тебе сейчас книгу "САПР на базе AutoCAD - как это делается" буду индивидуально пересказывать?
У тебя ведь программа даже в первом приближении далека от рабочего вида, начиная с первой и заканчивая предпоследней строкой. Может, всё-таки согласишься литературу почитать? Я конечно могу прямо сюда воткнуть рабочий код для рисования любых отводов. Вот в 2D: Код:
Код:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
|
|||
![]() |