|
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
|
|
Построение дуги в пространстве05.09.2023, 19:05. Показов 918. Ответов 18
Метки нет (Все метки)
Народ всем привет. Уже два дня мучаюсь и не могу победить. Суть вопроса такова: по служебной необходимости появилась нужда в собственном приложении на VB6, куда загружаются STEP модели деталей из гнутого прутка и вытаскивается их полная информация об оси прутка, его диаметре, точках гиба и их радиусах. Сам парсер и часть 3D - визуализатора написал, но уперся в вопрос, как отрисовать на местах гибов дуги.
Приложил скриншотом как сейчас выглядит модель (подрисовал красным аля требуемые дуги) - есть все по сути кроме дуг (начальная и конечная точка, прямые участки, центры дуг гибов). В виду плотного парсинга STEP-файла имеется в распоряжении довольно много координатной информации: собственно координата центра гиба, радиус оси прутка в месте гиба, начальная и конечная точка (хорда). Помогите пожалуйста победить данный момент.
0
|
|
| 05.09.2023, 19:05 | |
|
Ответы с готовыми решениями:
18
Построение дуги Построение дуги |
|
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
|
|
| 05.09.2023, 19:22 [ТС] | |
|
С прямыми та просто, я имею координаты начала и конца и просто рисую. Чтобы нарисовать дугу или состряпать из сегментов, нужно знать точки находящиеся на дуге. У меня есть код который красиво рисует дугу, но мне нудно знатьв идеале среднюю точку в дуге.
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
|
|
|
Модератор
|
|||
| 06.09.2023, 10:56 | |||
|
0
|
|||
|
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
|
||
| 06.09.2023, 12:55 [ТС] | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
|
|
| 06.09.2023, 22:20 [ТС] | |
|
Вообще честно говоря не понимаю что происходит. Как оказалось, DIRECTION это именно нормаль к окружности (единичный вектор), которую я начал использовать, для того чтобы просто прокрутить начальную точку дуги на половинный угол дуги. Но появляются какие-то непонятные для меня вещи.
Вот яркий пример: На маршруте два гиба, как видно из второй картинки, те самые единичные вектора DV у них одинаковые, но это и не удивительно, ведь гибы лежат в одной плоскости. Но когда я кручу начальную точку каждой дуги, при одинаковых векторах нормали, почему-то точка крутится в разные стороны (на первом левом гибе как положено, на втором правом в обратную сторону). Ну и собственно возникают необъяснимые отклонения провернутой точки от изначальной плоскости (как будто-бы она проворачивается вообще относительно некой другой оси). При этом, если выполнять проворот в 0 градусов, то на протяжении всей детали, новая точка находится четко в начале всех дуг по ходу следования от начала прутка к концу и не отклоняется от изначальной плоскости дуги, но при этом при задании некого угла крутится в разные стороны везде.
0
|
|
|
Модератор
|
||
| 07.09.2023, 11:15 | ||
|
1
|
||
|
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
|
|
| 08.09.2023, 11:56 [ТС] | |
|
В данный момент я так и пробовал делать. Вычитал вектор a и b(по вашей картинке) из вектора О и вращал a на половинный угол между a и b относительно оси DIRECTION. В некоторых местах точка нуда-то уезжает, как будто бы идет смещение оси DIRECTION. Хотя даже чисто визуально видно, что прорисованная ось DIRECTION является перпендикуляром к плоскости, по которой нужно крутить точку чтобы получить правильную дугу. Пробовал крутить и через матрицу свободного поворота, и поочередно матрицами и просто поворачивая каждый вектор до совпадения с плоскостью, на которой уже рисовал 2D - дугу и поворачивал на место.
0
|
|
|
0 / 0 / 0
Регистрация: 18.12.2022
Сообщений: 13
|
|
| 08.09.2023, 12:42 [ТС] | |
|
Две серые перпендикулярные линии (та что левее и выше - идет как бы горизонтально, та что ниже - вертикально вниз перпендикулярно первой. маленькие оси (красная и зеленая) это те самые DIRECTION (первый и второй - их по два везде). Синяя точка - это как раз таки начальная координата которая относительно красной оси была провернута, по рисунку видно что она крутанулась не в плоскости в которой лежат линии, центр радиуса, и соответственно улетела правее этой плоскости. Красный пунктир - это тестовая дуга построенная через две крайние точки и полученную среднюю точку (синюю), которая явно показывает что дуга не в плоскости.
По сути пробегаю циклом по всем местам где нужно построить дуги и выполняю один и тот же алгоритм, но какие-то точки строятся как положено в плоскости к которой DIRECTION является нормалью, а какие-то вот так улетают в бок. Формально угол их проворота соответствует действительности, если просто рассматривать их движение по кругу, но вот плоскость круга смещена.
0
|
|
|
Модератор
|
|
| 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 [ТС] | ||
|
0
|
||
|
Модератор
|
|
| 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
|
|
|
Модератор
|
|
| 20.09.2023, 13:19 | |
|
Ostroukhovuo, скинь свой проект и файл демонстрирующий проблему. Желательно именно часть где баг вместе с прилегающими линиями, а не только гибы.
0
|
|
| 20.09.2023, 13:19 | |
|
Помогаю со студенческими работами здесь
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-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|