Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13

Построение дуги в пространстве

05.09.2023, 19:05. Показов 918. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ всем привет. Уже два дня мучаюсь и не могу победить. Суть вопроса такова: по служебной необходимости появилась нужда в собственном приложении на VB6, куда загружаются STEP модели деталей из гнутого прутка и вытаскивается их полная информация об оси прутка, его диаметре, точках гиба и их радиусах. Сам парсер и часть 3D - визуализатора написал, но уперся в вопрос, как отрисовать на местах гибов дуги.



Приложил скриншотом как сейчас выглядит модель (подрисовал красным аля требуемые дуги) - есть все по сути кроме дуг (начальная и конечная точка, прямые участки, центры дуг гибов). В виду плотного парсинга STEP-файла имеется в распоряжении довольно много координатной информации: собственно координата центра гиба, радиус оси прутка в месте гиба, начальная и конечная точка (хорда).

Помогите пожалуйста победить данный момент.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.09.2023, 19:05
Ответы с готовыми решениями:

Уравнение окружности в пространстве по точкам (или, возможно, дуги на поверхности сферы)
Имеется сфера с известным центром и радиусом, две точки на ее поверхности с известными координатами (x, y, z). Требуется провести третью...

Построение дуги
Добрый день! Я только начал программировать род Autocad с использованием net. Запнулся на простой вроде бы проблеме: В пространстве...

Построение дуги
Здравствуйте, нужна помощь, как кодом построить выделенную дугу?

18
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
05.09.2023, 19:13
Аппроксимируй дуги прямыми в 3D и потом просто проецируй эти прямые как ты делаешь с обычными прямыми.
1
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
05.09.2023, 19:22  [ТС]
С прямыми та просто, я имею координаты начала и конца и просто рисую. Чтобы нарисовать дугу или состряпать из сегментов, нужно знать точки находящиеся на дуге. У меня есть код который красиво рисует дугу, но мне нудно знатьв идеале среднюю точку в дуге.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
05.09.2023, 19:33
Ostroukhovuo, как задана дуга?
0
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
05.09.2023, 22:11  [ТС]
Известна точка центра ее окружности (XR, YR, ZR), известно значение радиуса дуги R и известны точки ее начала и конца (X1, Y1, Z1) и (X2, Y2, Z2)

Добавлено через 1 час 18 минут
Также имеется доп. вопрос: как проверить, лежит ли отрезок, имеющий начальную и конечную точки, в одной плоскости с одним или двумя другими отрезками?

Добавлено через 1 час 17 минут
Забыл совсем, для точек-центров радиусов гибов из файла модели вытаскивается еще, как я понял вектор нормали этого круга в таком формате:

DIRECTION ( 'NONE', ( -0.9684094501250686271, 0.2279178656902995925, -0.1011760021331186837 ) ) ;

Судя по всему это углы наклона по осям в радианах, но это не точно. Максимальное значение в таких записях - 1, когда ось ортогональна системе. Если ось круга ориентирована по оси Х например, будет запись (1, 0, 0) или (-1, 0, 0)
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
06.09.2023, 10:56
Цитата Сообщение от Ostroukhovuo Посмотреть сообщение
Известна точка центра ее окружности (XR, YR, ZR), известно значение радиуса дуги R и известны точки ее начала и конца (X1, Y1, Z1) и (X2, Y2, Z2)
Тогда не пойму в чем проблема? По трем точкам задается плоскость, остается только аппроксимировать часть окружности с нужным шагом.

Цитата Сообщение от Ostroukhovuo Посмотреть сообщение
Забыл совсем, для точек-центров радиусов гибов из файла модели вытаскивается еще, как я понял вектор нормали этого круга в таком формате:
Ну это скорее всего для направления дуги.
0
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
06.09.2023, 12:55  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Тогда не пойму в чем проблема? По трем точкам задается плоскость, остается только аппроксимировать часть окружности с нужным шагом.
Можете привести пример, я пока немного плаваю в этой теме, впервые пишу такие вещи.
0
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
06.09.2023, 22:20  [ТС]
Вообще честно говоря не понимаю что происходит. Как оказалось, DIRECTION это именно нормаль к окружности (единичный вектор), которую я начал использовать, для того чтобы просто прокрутить начальную точку дуги на половинный угол дуги. Но появляются какие-то непонятные для меня вещи.

Вот яркий пример:



На маршруте два гиба, как видно из второй картинки, те самые единичные вектора DV у них одинаковые, но это и не удивительно, ведь гибы лежат в одной плоскости. Но когда я кручу начальную точку каждой дуги, при одинаковых векторах нормали, почему-то точка крутится в разные стороны (на первом левом гибе как положено, на втором правом в обратную сторону). Ну и собственно возникают необъяснимые отклонения провернутой точки от изначальной плоскости (как будто-бы она проворачивается вообще относительно некой другой оси).



При этом, если выполнять проворот в 0 градусов, то на протяжении всей детали, новая точка находится четко в начале всех дуг по ходу следования от начала прутка к концу и не отклоняется от изначальной плоскости дуги, но при этом при задании некого угла крутится в разные стороны везде.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
07.09.2023, 11:15
Цитата Сообщение от Ostroukhovuo Посмотреть сообщение
Можете привести пример, я пока немного плаваю в этой теме, впервые пишу такие вещи.
Ну у тебя есть центр окружности и начальная точка. Строй вектор который поворачивай на угол образованный векторами центр-начальная точка / центр-конечная точка с нужным шагом. Direction - это вектор вокруг которого крутить нужно скорее всего т.к. у тебя 3D.

1
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
08.09.2023, 11:56  [ТС]
В данный момент я так и пробовал делать. Вычитал вектор a и b(по вашей картинке) из вектора О и вращал a на половинный угол между a и b относительно оси DIRECTION. В некоторых местах точка нуда-то уезжает, как будто бы идет смещение оси DIRECTION. Хотя даже чисто визуально видно, что прорисованная ось DIRECTION является перпендикуляром к плоскости, по которой нужно крутить точку чтобы получить правильную дугу. Пробовал крутить и через матрицу свободного поворота, и поочередно матрицами и просто поворачивая каждый вектор до совпадения с плоскостью, на которой уже рисовал 2D - дугу и поворачивал на место.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
08.09.2023, 12:12
Ostroukhovuo, по Вашему рисунку непонятно что есть что.
0
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
08.09.2023, 12:42  [ТС]
Две серые перпендикулярные линии (та что левее и выше - идет как бы горизонтально, та что ниже - вертикально вниз перпендикулярно первой. маленькие оси (красная и зеленая) это те самые DIRECTION (первый и второй - их по два везде). Синяя точка - это как раз таки начальная координата которая относительно красной оси была провернута, по рисунку видно что она крутанулась не в плоскости в которой лежат линии, центр радиуса, и соответственно улетела правее этой плоскости. Красный пунктир - это тестовая дуга построенная через две крайние точки и полученную среднюю точку (синюю), которая явно показывает что дуга не в плоскости.

По сути пробегаю циклом по всем местам где нужно построить дуги и выполняю один и тот же алгоритм, но какие-то точки строятся как положено в плоскости к которой DIRECTION является нормалью, а какие-то вот так улетают в бок. Формально угол их проворота соответствует действительности, если просто рассматривать их движение по кругу, но вот плоскость круга смещена.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
08.09.2023, 12:50
Ostroukhovuo, все-равно не понимаю. Если есть возможность, скиньте координаты 2-х линий и дуги их соединяющей, так я быстрее соображу. Не могу понять при чем тут вообще синяя точка. По рисунку это больше напоминает не дугу, а квадратичную кривую Безье.

Добавлено через 1 минуту
И что за формат такой, если можно спецификацию.

Добавлено через 2 минуты
По рисунку кажется как буд-то центр окружности не там где нужно.
0
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
08.09.2023, 13:00  [ТС]
Да, вы верно заметили, это по сути на данный момент не сектор круга (красный пунктир), а Безье построенная для скорости через три точки - две известные (кончики серых линий) и синюю, которую я нахожу и которая должна лежать по центру дуги сектора окружности.

Я парсю STEP файл, который получен сохранением детали из SolidWorks.
Положения линий, как и точки центров расположены четко, я это вижу вращая модель, а вот синие точки которые я получаю то верные, то куда-то смещены.





Особых ошибок в модели быть не может, так как все кроме синих точек и Безье строится на основе координат исходного файла и соответственно проблем не имеет.
0
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
08.09.2023, 13:06  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
И что за формат такой, если можно спецификацию.
Спецификаций нет, поэтому пришлось методом сохранения из солида простых примитивов разбираться в структуре и записях STEP-файла. Особая сложность в том, что исходник заточен на воссоздание твердотельной модели в объеме, а мне требуется вынуть от туда ось, так как это изделие должно быть направлено на прутогибочный станок.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
08.09.2023, 13:12
Ostroukhovuo, ну скиньте мне 2 линии (координаты начала и конца) и дугу (тоже все координаты) которые вызывают проблему. Я что-то так и не догнал зачем вычислять синюю точку, если можно просто крутить вектор.
0
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
08.09.2023, 14:36  [ТС]
Координаты всех гибов данной детали, PR - точка центра окружности, P1 - точка начала дуги, P2 - точка конца дуги, дирекшены как есть (№1 - на скринах красный, № 2 - зеленый).
Особо геморройные гибы: 4, 10, 12, 22, 24, 30

***ГИБ 2***
PR -> -74,2 85 7,79
P1 -> -76 85 0
P2 -> -74,2 93 7,79
DIRECTION1 -> 0,9743700648 0 -0,2249510543
DIRECTION2 -> -0,2249510543 0 -0,9743700648

***ГИБ 4***
PR -> -39,33 70,5 158,82
P1 -> -39,33 93 158,82
P2 -> -34,27 70,5 180,75
DIRECTION1 -> 0,9743700648 0 -0,2249510543
DIRECTION2 -> -0,2249510543 0 -0,9743700648

***ГИБ 6***
PR -> -36,07 0,5 172,95
P1 -> -34,27 0,5 180,75
P2 -> -35,96 -7,49 173,42
DIRECTION1 -> 0,9743700648 0 -0,2249510543
DIRECTION2 -> -0,2249510543 0 -0,9743700648

***ГИБ 8***
PR -> -45,93 -10,16 164,66
P1 -> -38,42 -8,14 162,8
P2 -> -45,93 -10,16 156,66
DIRECTION1 -> -0,2588190451 0,9659258263 0
DIRECTION2 -> -0,9659258263 -0,2588190451 0

***ГИБ 10***
PR -> -205,31 -52,86 180,66
P1 -> -205,31 -52,86 156,66
P2 -> -228,49 -59,07 180,66
DIRECTION1 -> -0,2588190451 0,9659258263 0
DIRECTION2 -> -0,9659258263 -0,2588190451 0

***ГИБ 12***
PR -> -205,31 -52,86 180,76
P1 -> -228,49 -59,07 180,76
P2 -> -205,31 -52,86 204,76
DIRECTION1 -> -0,2588190451 0,9659258263 0
DIRECTION2 -> -0,9659258263 -0,2588190451 0

***ГИБ 14***
PR -> -116,31 -37,3 204,76
P1 -> -118,38 -29,57 204,76
P2 -> -108,58 -35,22 204,76
DIRECTION1 -> 0 0 -1
DIRECTION2 -> -1 0 0

***ГИБ 16***
PR -> -95,67 -52,47 204,76
P1 -> -103,4 -54,54 204,76
P2 -> -95,67 -60,47 204,76
DIRECTION1 -> 0 0 1
DIRECTION2 -> 1 0 0

***ГИБ 18***
PR -> 95,67 -52,47 204,76
P1 -> 95,67 -60,47 204,76
P2 -> 103,4 -54,54 204,76
DIRECTION1 -> 0 0 1
DIRECTION2 -> -1 0 0

***ГИБ 20***
PR -> 116,31 -37,3 204,76
P1 -> 108,58 -35,22 204,76
P2 -> 118,38 -29,57 204,76
DIRECTION1 -> 0 0 -1
DIRECTION2 -> 1 0 0

***ГИБ 22***
PR -> 205,31 -52,86 180,76
P1 -> 205,31 -52,86 204,76
P2 -> 228,49 -59,07 180,76
DIRECTION1 -> 0,2588190451 0,9659258263 0
DIRECTION2 -> 0,9659258263 -0,2588190451 0

***ГИБ 24***
PR -> 205,31 -52,86 180,66
P1 -> 228,49 -59,07 180,66
P2 -> 205,31 -52,86 156,66
DIRECTION1 -> 0,2588190451 0,9659258263 0
DIRECTION2 -> 0,9659258263 -0,2588190451 0

***ГИБ 26***
PR -> 45,93 -10,16 164,66
P1 -> 45,93 -10,16 156,66
P2 -> 38,42 -8,14 162,8
DIRECTION1 -> 0,2588190451 0,9659258263 0
DIRECTION2 -> 0,9659258263 -0,2588190451 0

***ГИБ 28***
PR -> 36,07 0,5 172,95
P1 -> 35,96 -7,49 173,42
P2 -> 34,27 0,5 180,75
DIRECTION1 -> -0,9743700648 0 -0,2249510543
DIRECTION2 -> 0,2249510543 0 -0,9743700648

***ГИБ 30***
PR -> 39,33 70,5 158,82
P1 -> 34,27 70,5 180,75
P2 -> 39,33 93 158,82
DIRECTION1 -> -0,9743700648 0 -0,2249510543
DIRECTION2 -> 0,2249510543 0 -0,9743700648

***ГИБ 32***
PR -> 74,2 85 7,79
P1 -> 74,2 93 7,79
P2 -> 76 85 0
DIRECTION1 -> -0,9743700648 0 -0,2249510543
DIRECTION2 -> 0,2249510543 0 -0,9743700648
0
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
20.09.2023, 00:02  [ТС]
Добрый вечер коллеги. Не появилось мыслей в чем может быть проблема?
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
20.09.2023, 13:19
Ostroukhovuo, скинь свой проект и файл демонстрирующий проблему. Желательно именно часть где баг вместе с прилегающими линиями, а не только гибы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.09.2023, 13:19
Помогаю со студенческими работами здесь

Построение дуги по формулам
Осваиваю Маткад и надо нарисовать дугу по 100 точкам по заданым формулам. Вроде формулы ввёл правильно, а результата нет. Прикладываю...

Соединение двух точек кривой, Построение дуги эллипса под углом
Задание такое: задается две произвольные точки после чего из нужно соединить кривой. Думал сделать это при помощи эллипса, но...

Построение многоугольников в пространстве
Здравствуйте участники форума! Обращаюсь к вам с огромной просьбой, потому что больше не к кому. Короче требуется ваша помощь!:-[ ...

Построение орбит в пространстве
Необходимо построить орбиты в гелиоцентрической системе координат Земли Венеры и перелета в пространстве учитывая их наклонение...

Построение прямых в пространстве
Нужно в матлабе построить прямую в пространстве. Например у меня задана прямая в каноническом виде - ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru