AutoCAD API. Расчет кривизны дуги (bulge).

Автор Тема: AutoCAD API. Расчет кривизны дуги (bulge).  (Прочитано 18523 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Вопрос:
При построении дуговых элементов в качестве одного из параметров часто требуется указать кривизну дуги (bulge). В справочной информации AutoCAD .NET API указано:
Определение №1: Кривизна - это тангенс 1/4 центрального угла дуги (центральный угол дуги - α).
В различных других источниках можно найти дополнительные определения:
Определение №2: Кривизна - это отношение высоты сегмента дуги к половине длины его хорды (высота сегмента - h, длина хорды - d). Например, тут.
Определение №3: Кривизна - это тангенс угла, образуемого отрезками (угол β): первый - от середины дуги к ее начальной (или конечной) точке, второй - от начальной до конечной точки дуги. Например, тут.
Какое из дополнительных определений соответствует истине и может применяться для вычисления кривизны дуги?



Ответ:
Определение №2 и Определение №3 являются геометрически эквивалентными, т.к. tg(β) = h / (0.5 x d). Осталось выяснить, какая зависимость между углами α и β. Для этого выполним дополнительные построения:



Рассмотрим сперва треугольник OMC. Он прямоугольный, с двумя острыми углами: α/2 и γ. Отсюда получаем, что γ = 90° - α/2.
Далее, рассмотрим треугольник OBC. Он равнобедренный, с тремя углами: α/2 и β+γ = δ. Отсюда получаем, что (180° - α/2) / 2 = β+γ, следовательно: γ = 90° - α/4 - β.
Теперь, объединим эти два равенства:  90° - α/2 = 90° - α/4 - β. Отсюда получаем, что β = α/4, то есть, угол β равен четверти центрального угла дуги. А это как раз то, о чем идет речь в Определении №1.
Следовательно, оба дополнительных определения являются верными и для расчета кривизны можно применять любое из трех, исходя из имеющихся данных.
« Последнее редактирование: 15-11-2018, 17:11:18 от Дмитрий Загорулькин »

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: AutoCAD API. Расчет кривизны дуги (bulge).
« Ответ #1 : 08-06-2017, 15:51:23 »
Тема вычисления bulge (с разъяснением его геометрического смысла) уже довольно сильно "избита". В свое время я пользовался вот этой, одной из ранних статей на просторах интернета. Мне кажется там всё довольно подробно "разжёвано", так что и добавить особо нечего...

P.S.
Я удивлён что в справочной информации существует так много трактовок одного понятия. Надо бы "причесать" документацию.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AutoCAD API. Расчет кривизны дуги (bulge).
« Ответ #2 : 08-06-2017, 15:56:14 »
Я удивлён что в справочной информации существует так много трактовок одного понятия. Надо бы "причесать" документацию.
В Autodesk'овской документации есть только одна трактовка - п.1 Причем эта трактовка проходит через несколько документов (в том числе и ObjectARX/AutoCAD .NET API/DXF)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: AutoCAD API. Расчет кривизны дуги (bulge).
« Ответ #3 : 08-06-2017, 16:03:59 »
В Autodesk'овской документации есть только одна трактовка - п.1
Ну да, это я тоже отчётливо помню. Вот хотя бы здесь можно посмотреть.
Тогда, спрашивается, откуда автор топика взял ещё два определения?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AutoCAD API. Расчет кривизны дуги (bulge).
« Ответ #4 : 08-06-2017, 16:06:33 »
Тогда, спрашивается, откуда автор топика взял ещё два определения?
Он где-то написал, что другие источники - это источники Autodesk? Читаем внимательно:

В различных других источниках можно найти дополнительные определения:
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: AutoCAD API. Расчет кривизны дуги (bulge).
« Ответ #5 : 08-06-2017, 16:19:41 »
Он где-то написал, что другие источники - это источники Autodesk?
Я полагал что да, ибо про п.1 было сказано что это только в AutoCAD .NET API. Поэтому, (во избежание путаниц) надо бы приводить сразу ссылочки (это же не так трудно сделать). И потом, что это за источники? На сколько они надёжны? И стоит ли проверять их все и писать по этому поводу статьи?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AutoCAD API. Расчет кривизны дуги (bulge).
« Ответ #6 : 08-06-2017, 16:22:52 »
И потом, что это за источники? На сколько они надёжны? И стоит ли проверять их все и писать по этому поводу статьи?
Стоит, так как Дмитрий Загорулькин доказал, что все эти определения эквиваленты и:
Следовательно, оба дополнительных определения являются верными и для расчета кривизны можно применять любое из трех, исходя из имеющихся данных.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: AutoCAD API. Расчет кривизны дуги (bulge).
« Ответ #7 : 08-06-2017, 16:27:48 »
... так как Дмитрий Загорулькин доказал ...
Я не ставлю под сомнение доказательство Дмитрий Загорулькин, я лишь прошу дополнить статью соответствующими ссылками на первоисточники.

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: AutoCAD API. Расчет кривизны дуги (bulge).
« Ответ #8 : 08-06-2017, 17:24:53 »
дополнить статью соответствующими ссылками на первоисточники
Добавил.

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Re: AutoCAD API. Расчет кривизны дуги (bulge).
« Ответ #9 : 09-06-2017, 13:07:16 »
Добавил.
Так получается, что это источник Autodesk!

Он где-то написал, что другие источники - это источники Autodesk?
Требую чтобы Ривилис дезавуировал свой вопрос.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AutoCAD API. Расчет кривизны дуги (bulge).
« Ответ #10 : 09-06-2017, 13:26:42 »
Так получается, что это источник Autodesk!
Это в терминах MAP 3D.
Требую чтобы Ривилис дезавуировал свой вопрос.
Щас! :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: AutoCAD API. Расчет кривизны дуги (bulge).
« Ответ #11 : 24-01-2018, 17:55:45 »
Сегодня тема получила продолжение. Понадобилось мне из имеющихся значений: начальная точка дуги, конечная точка дуги и кривизна (bulge) получить точку центра дуги. Довольно быстро поиск привёл меня на сайт Lee Mac'a. Есть у него хорошие функции на LISP для этого: http://www.lee-mac.com/bulgeconversion.html. Да вот беда - не всегда понятно как и откуда получены такие красивые и компактные формулы. Особенно меня смутили формулы получения радиуса вот на этой картинке:

Компактно и просто, никаких арктангенсов и прочей тригонометрии. Но откуда они взяты?
В конце статьи есть ссылка на теоретический материал: http://www.afralisp.net/archive/lisp/Bulges1.htm
Да, там тоже есть эта загадочная формула:
Radius of the arc can now be found with this formula:

r = ((c/2)2+s2)/2*s
Но опять же, непонятно, откуда она взялась? Возможно, что у них это всё было в школьной программе и является настолько очевидным, что не требует пояснения. Можно, конечно же, просто поверить на слово и взять её в использование. Но лучше разобраться и понять, откуда и как она получилась.
В этом поможет такая картинка:

Равенства, которые понадобятся:
1. R = h1 + h2
2. tg α = d/h2
3. tg β = h1/d
А теперь, самое интересное. Как мы уже знаем, α = 2β. Следовательно, tg α = tg 2β. А для тангенса двойного угла есть формула разложения:

Выводим из уравнений 2 и 3 значения h1 и h2, подставляем их в уравнение 1, раскладываем тангенс двойного угла, заменяем tg β = b, где b - кривизна дуги (bulge), а b = s/d, где s - высота сегмента (на моём рисунке - h1). Преобразуем, упрощаем. В итоге, получаем эти красивые формулы вычисления радиуса дуги.
« Последнее редактирование: 15-11-2018, 16:59:21 от Дмитрий Загорулькин »

Оффлайн Sergey_K

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: AutoCAD API. Расчет кривизны дуги (bulge).
« Ответ #12 : 02-05-2019, 20:18:55 »
В Autodesk'овской документации есть только одна трактовка - п.1 Причем эта трактовка проходит через несколько документов (в том числе и ObjectARX/AutoCAD .NET API/DXF)

If bulgeFlag is Adesk::kTrue, then bulge is interpreted to be the maximum distance between the arc and the chord between the two input points. If bulgeFlag is Adesk::kFalse, then bulge is interpreted to be the tangent of 1/4 the included angle (tan(ang/4)), where ang is the angle of the arc segment between the two input points

http://docs.autodesk.com/ACDMAC/2013/ENU/ObjectARX%20Reference/index.html?frmname=topic&frmfile=%21%21OVERLOADED_set_AcGeCircArc2d.html

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AutoCAD API. Расчет кривизны дуги (bulge).
« Ответ #13 : 02-05-2019, 20:36:49 »
В Autodesk'овской документации есть только одна трактовка - п.1 Причем эта трактовка проходит через несколько документов (в том числе и ObjectARX/AutoCAD .NET API/DXF)

If bulgeFlag is Adesk::kTrue, then bulge is interpreted to be the maximum distance between the arc and the chord between the two input points. If bulgeFlag is Adesk::kFalse, then bulge is interpreted to be the tangent of 1/4 the included angle (tan(ang/4)), where ang is the angle of the arc segment between the two input points

http://docs.autodesk.com/ACDMAC/2013/ENU/ObjectARX%20Reference/index.html?frmname=topic&frmfile=%21%21OVERLOADED_set_AcGeCircArc2d.html

И?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Sergey_K

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2