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

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

как поделить дугу на хорды заданногтьо размера

Ответ
Поиск в этой теме
Непрочитано 12.01.2009, 07:27 #1
как поделить дугу на хорды заданногтьо размера
Jonas
 
конструктор машиностроитель
 
Новосибирск
Регистрация: 14.05.2007
Сообщений: 893

Собственно нужно расположить отверстия по дуге с заданным растоянием по хорде. Поиском ничего не нашел.
Просмотров: 9752
 
Непрочитано 12.01.2009, 07:42
#2
_Andre_

механизатор
 
Регистрация: 28.12.2004
Самара
Сообщений: 312
<phrase 1=


По длине хорды можно через формулы геометрии найти длину дуги заключенно между концами хорды, а далее командой _measure разметить точки.
_Andre_ вне форума  
 
Непрочитано 12.01.2009, 07:48
#3
_Andre_

механизатор
 
Регистрация: 28.12.2004
Самара
Сообщений: 312
<phrase 1=


Длина дуги L на окружности радиусом R между двумя точками хорды длиной l равна
L=R*arcsin (l/(2*R))
Вроде так получилось
_Andre_ вне форума  
 
Непрочитано 12.01.2009, 09:27
#4
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


_Andre_, формулы тут не нужны.
1 Нарисовать окружность радиусом равным хорде и с центром в точке начала дуги.
2 нарисовать окружность с диаметром равным диаметру отверстия с центром в точке пересечения дуги и окружности
3 сформировать круговой массив из отверстий с центром в центре дуги
Хмурый вне форума  
 
Автор темы   Непрочитано 12.01.2009, 09:47
#5
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Цитата:
Сообщение от Хмурый Посмотреть сообщение
_Andre_, формулы тут не нужны.
1 Нарисовать окружность радиусом равным хорде и с центром в точке начала дуги.
2 нарисовать окружность с диаметром равным диаметру отверстия с центром в точке пересечения дуги и окружности
3 сформировать круговой массив из отверстий с центром в центре дуги
Так ведь масив строится по углам а не по хордам.
Jonas вне форума  
 
Непрочитано 12.01.2009, 09:54
#6
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


ну, ежели не можешь указать угол на чертеже...
Миниатюры
Нажмите на изображение для увеличения
Название: SPXImage1474.jpg
Просмотров: 689
Размер:	43.0 Кб
ID:	14602  
Хмурый вне форума  
 
Непрочитано 12.01.2009, 10:03
#7
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


из окружности, изобразающей отверстие, создать блок с точкой вставки в центре отверстия. (имя блока в примере 1)
возьми команду _measure (ПОДЕЛИТЬ) и дугу дугу блоками

_measure
Select object to measure:
Specify length of segment or [Block]: b
Enter name of block to insert: 1

Align block with object? [Yes/No] <Y>:

Specify length of segment: 20 (здесь укажешь длину полученной дуги над заданной хордой)

PS длину дуги снять с чертежа из её свойств. без вычислений

Последний раз редактировалось Хмурый, 12.01.2009 в 10:11.
Хмурый вне форума  
 
Автор темы   Непрочитано 12.01.2009, 10:13
#8
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


здесь укажешь длину полученной дуги над заданной хордой

"Просто добавь воды"!
Если вычислил, замерил или украл длину дуги то и вопросов нет - _measure и поехали.
И зачем блок?
Jonas вне форума  
 
Непрочитано 12.01.2009, 10:15
#9
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,379


сразу их расположишь по дуге
Миниатюры
Нажмите на изображение для увеличения
Название: SPXImage1475.jpg
Просмотров: 296
Размер:	49.5 Кб
ID:	14607  
Хмурый вне форума  
 
Непрочитано 12.01.2009, 10:34
#10
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Jonas,
1.
Превращаешь дугу в дуговой сегмент полилинии.
2. Нужно скачать и установить Новые команды для работы с полилинией
3. PL-NoArc -Аппроксимация дуговых сегментов полилинии
4. См. опции и картинку

*** ДОБАВЛЕНО ***
Длина хорды будет точна до определенного знака, т.к. высчитывается по формулам.
Можно рисовать круги диаметром=диаметру хорды. Сначала из начальной точки, потом из точки пересечения предыдущего круга и так пока есть пересечения круга и дуги.
Миниатюры
Нажмите на изображение для увеличения
Название: NoArc.gif
Просмотров: 294
Размер:	93.3 Кб
ID:	14609  
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 12.01.2009 в 10:39.
VVA вне форума  
 
Автор темы   Непрочитано 12.01.2009, 11:28
#11
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


До сих пор делал так :
- рисовал окружность радиусом равным хорде и с центром на начале дуги,
- разрывал дугу в точке пересечения дуги и окружности
- измерял длину полученного отрезка дуги,
- и далее делил дугу на отрезки равные полученному результату.
Все замечательно, и точность достаточна но многодельно.
Jonas вне форума  
 
Непрочитано 12.01.2009, 11:49
#12
BM60


 
Регистрация: 08.02.2008
Где-то
Сообщений: 8,460


Много чего еще будет многодельного. Значит надо привыкать.
Но, говорят, скоро выпустят малодельный Кад, типа шепнул ему фразу из ниспадающего списка и Кад амаганавенна это выполнил.
И замечательно будет и ничегонедельно будет...
BM60 вне форума  
 
Непрочитано 12.01.2009, 17:50
#13
Zouss


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


вот пока так
Код:
[Выделить все]
(defun c:da2c (/ lenc ed cp rl sa ea aa ca)

  (defun entmake_circle	(cp rr)
    (entmake (list (cons 0 "CIRCLE")
		   (cons 10 cp)
		   (cons 40 rr)
	     ) ;_  list
    ) ;_  entmake
  ) ;_  defun

  (setq
    lenc 50				;(getreal "задайте длину хорды:")
    ed	 (entget (ssname (ssget ":S" '((0 . "ARC"))) 0))
    cp	 (cdr (assoc 10 ed))
    rl	 (cdr (assoc 40 ed))
    sa	 (cdr (assoc 50 ed))
    ea	 (cdr (assoc 51 ed))
    lenc (/ lenc 2)
    aa	 (atan (/ lenc (sqrt (- (* rl rl) (* lenc lenc)))))
    aa	 (+ aa aa)
    ca	 sa
  )
  (while (< ca ea)
    (progn
      (entmake_circle (polar cp ca rl) lenc)
      (setq ca (+ ca aa))
    )
  )
  (* 180.0 (/ aa pi))
)
только срабатывает программка в случае если начальный угол дуги меньше конечного и обход делает против часовой стрелки, да и проверок никаких нет конечно же
как правильно определить направление обхода дуги никак собразить не получается - может подскажет кто?
Zouss вне форума  
 
Автор темы   Непрочитано 13.01.2009, 04:44
#14
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Что то не получается, пишет << _da2c ; ошибка: неверная строка режима ssget >>
Jonas вне форума  
 
Непрочитано 13.01.2009, 08:03
#15
Кулик Алексей aka kpblc
Moderator

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


Все верно, локализация не учтена. Была:
Код:
[Выделить все]
(defun c:da2c (/ lenc ed cp rl sa ea aa ca)

  (defun entmake_circle	(cp rr)
    (entmake (list (cons 0 "CIRCLE")
		   (cons 10 cp)
		   (cons 40 rr)
	     ) ;_  list
    ) ;_  entmake
  ) ;_  defun

  (setq
    lenc 50				;(getreal "задайте длину хорды:")
    ed	 (entget (ssname (ssget "_:S" '((0 . "ARC"))) 0))
    cp	 (cdr (assoc 10 ed))
    rl	 (cdr (assoc 40 ed))
    sa	 (cdr (assoc 50 ed))
    ea	 (cdr (assoc 51 ed))
    lenc (/ lenc 2)
    aa	 (atan (/ lenc (sqrt (- (* rl rl) (* lenc lenc)))))
    aa	 (+ aa aa)
    ca	 sa
  )
  (while (< ca ea)
    (progn
      (entmake_circle (polar cp ca rl) lenc)
      (setq ca (+ ca aa))
    )
  )
  (* 180.0 (/ aa pi))
)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.01.2009, 09:42
#16
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Пишет -
<< Команда: _da2c
Выберите объекты:
3.35207 >> и рисуеи окружности р=25.
Jonas вне форума  
 
Непрочитано 13.01.2009, 10:54
#17
Zouss


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


собственно направление обхода дуги и не нужно (кажется)
вот более работоспособный вариант
Код:
[Выделить все]
(defun c:da2c (/ lenc ed cp rl sa ea aa ca 2pi)

  (defun entmake_circle	(cp rr)
    (entmake (list (cons 0 "CIRCLE")
		   (cons 10 cp)
		   (cons 40 rr)
	     ) ;_  list
    ) ;_  entmake
  ) ;_  defun

  (defun while_proc (sa ea ca aa cp rl lenc / z)
    (while (< ca ea)
      (progn
	(entmake_circle (polar cp ca rl) lenc)
	(setq ca (+ ca aa))
      ) ;_  progn
    ) ;_  while
    (setq z ca)
    z
  ) ;_  defun

  (setq
    lenc (getreal "задайте длину хорды:")
    ed	 (entget (ssname (ssget "_:S" '((0 . "ARC"))) 0))
    cp	 (cdr (assoc 10 ed))
    rl	 (cdr (assoc 40 ed))
    sa	 (cdr (assoc 50 ed))
    ea	 (cdr (assoc 51 ed))
    lenc (/ lenc 2)
    aa	 (atan (/ lenc (sqrt (- (* rl rl) (* lenc lenc)))))
    aa	 (+ aa aa)
    ca	 sa
  ) ;_  setq
  (if (< ea sa)
    (setq ca (- (while_proc sa (setq 2pi (* 2 pi)) ca aa cp rl lenc) 2pi))
  ) ;_  if
  (while_proc ca ea ca aa cp rl lenc)
  (princ)
) ;_  defun
Zouss вне форума  
 
Автор темы   Непрочитано 13.01.2009, 11:15
#18
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Сейчас рисует окружгости заданным радиусом по дуге а далее не понятна задумка, если брать центр и пересечение соседних окружностей то конечно это радиус вот только точка эта не лежит на дуге.
Jonas вне форума  
 
Непрочитано 13.01.2009, 11:45
#19
Zouss


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


а это согласно условию изложенному в первом посте (ну или тому, как я его понял )
Цитата:
Сообщение от Jonas Посмотреть сообщение
расположить отверстия по дуге с заданным растоянием по хорде
поподробнее опишите - что пользователь должен задавать, что прога сама должна вычислять, картинку с нужным результатом если приложите будет лучше всего
Zouss вне форума  
 
Автор темы   Непрочитано 13.01.2009, 12:30
#20
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


"Расположить отверстия по дуге с заданным растоянием по хорде"
Вообщем то нужно поделить дугу на отрезки заданной длины по хорде, или выполнить круговой масив с заданным размером по хорде, смысл тот же.
Можно конечно делать вычислением но при этом результат не будет достаточно точным, в идеале графически.
Если бы в вашем коде каждый последующий круг строился с центром из точки пересечения предыдущенго круга с дугой, то все было бы в порядке и длина хорды соответствовала радиусу.
Jonas вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > как поделить дугу на хорды заданногтьо размера

Реклама i


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как строить дугу заданной длины ? ТРУП AutoCAD 31 21.01.2005 14:08
как перетащить в свою панельку кнопку-окошко выбора размера Соня AutoCAD 8 04.10.2004 08:54
Как вычертить объемную пространственную дугу (типа касаур) Lex AutoCAD 5 01.06.2004 10:33
Как создать дугу заданной длины? Елена AutoCAD 7 08.02.2004 23:29