Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Александр Пекшев aka Modis от 01-06-2017, 22:17:15

Название: Выпуклость (bulge) в зависимости от длины
Отправлено: Александр Пекшев aka Modis от 01-06-2017, 22:17:15
Всем привет. Стыдно конечно такое спрашивать, но что поделать =)
Задача: имеется сегмент полилинии между двумя точками. Нужно установить выпуклость для этого сегмента равную 1/10 длины между точками:

(https://s11.postimg.org/3lkr9i1gv/bulge.png) (https://postimg.org/image/3lkr9i1gv/)

Справка гласит, что
Цитировать
Выпуклость - это касательная 1/4 включенного угла для дуги между выбранной вершиной и следующей вершиной в списке вершин полилинии. Отрицательное значение пульса указывает, что дуга идет по часовой стрелке от выбранной вершины к следующей вершине. Выступ 0 указывает на прямой сегмент, а выпуклость 1 - полукруг.
Но у меня что-то никак не получается высчитать нужное значение
Название: Re: Выпуклость (bulge) в зависимости от длины
Отправлено: Дмитрий Загорулькин от 01-06-2017, 23:21:32
bulge = (length/10)/(length/2) = 1/5. Если обход против часовой стрелки - с плюсом, если по часовой - с минусом.
Название: Re: Выпуклость (bulge) в зависимости от длины
Отправлено: Александр Ривилис от 02-06-2017, 00:12:55
Справка гласит, что
Цитировать

    Выпуклость - это касательная 1/4 включенного угла для дуги между выбранной вершиной и следующей вершиной в списке вершин полилинии. Отрицательное значение пульса указывает, что дуга идет по часовой стрелке от выбранной вершины к следующей вершине. Выступ 0 указывает на прямой сегмент, а выпуклость 1 - полукруг.
Это кто же так переводил с английского???
Название: Re: Выпуклость (bulge) в зависимости от длины
Отправлено: Александр Пекшев aka Modis от 02-06-2017, 08:40:42
bulge = (length/10)/(length/2) = 1/5. Если обход против часовой стрелки - с плюсом, если по часовой - с минусом.
Неа. Не оно. Но методом тыка я получил нужный результат: bulge = ((lenght / 5) / lenght) * 4
Все равно спасибо за ответ. Я вчера слишком запарился и не подумал, что это отношение - это и есть тангенс ))

Это кто же так переводил с английского???
Google это переводил) Я просто не стал корректировать
Название: Re: Выпуклость (bulge) в зависимости от длины
Отправлено: Дмитрий Загорулькин от 02-06-2017, 10:54:03
Неа. Не оно.
Поспорим?  :)
Название: Re: Выпуклость (bulge) в зависимости от длины
Отправлено: Александр Ривилис от 02-06-2017, 10:55:46
Google это переводил) Я просто не стал корректировать
Ты из двух вариантов перевода, которые он предложил, выбрал самый бредовый.
Название: Re: Выпуклость (bulge) в зависимости от длины
Отправлено: Дмитрий Загорулькин от 02-06-2017, 11:58:58
bulge = ((lenght / 5) / lenght) * 4
= 4/5.
Это практически полукруг должен получиться.
Название: Re: Выпуклость (bulge) в зависимости от длины
Отправлено: Алексей Терно от 05-06-2017, 11:23:53
Неа. Не оно. Но методом тыка я получил нужный результат: bulge = ((lenght / 5) / lenght) * 4
Дима прав - формула Bulge = 2*H/D. Подставляя значения со скрина получается 1/5.
Название: Re: Выпуклость (bulge) в зависимости от длины
Отправлено: Алексей (IdeaSoft) от 15-11-2018, 16:19:14
А у меня похожий вопрос на эту тему
Даны:
1) Полилиния из одного сегмента радиусом R = 1,
2) Длина дуги против центрального угла в 45 градусов соотв. L = 0.785
3) Длину хорды тоже знаю X = 0.765

Функция GetBulgeAt() мне вернула значение 0,198..

Как самому рассчитать это значение выпуклости?

Угол считать не хочу.
Хватит ли мне тех данных, которые известны (мне известны R, X, L)
 
Название: Re: Выпуклость (bulge) в зависимости от длины
Отправлено: Александр Ривилис от 15-11-2018, 16:38:28
 AutoCAD API. Расчет кривизны дуги (bulge) (http://adn-cis.org/forum/index.php?topic=7827.0)
Название: Re: Выпуклость (bulge) в зависимости от длины
Отправлено: Александр Ривилис от 15-11-2018, 16:43:02
Хватит ли мне тех данных, которые известны (мне известны R, X, L)
Да. Должно хватить.
Если я ничего не перепутал, то в твоем случае:
Код - C# [Выбрать]
  1. double R = 1.0; // Радиус
  2. double L = 0.76536686; // Длина хорды
  3. double bulge = 2.0 * (R - Math.Sqrt((R*R - L*L/4.0)/L)); // Получилось 0.1989123660
Длина дуги даже лишняя.