Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 09.12.2015
Сообщений: 5

Нахождение кратчайшего пути в трехмерной системе координат

17.10.2021, 11:09. Показов 2869. Ответов 10

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые знатоки.

Есть трёхмерное пространство. В нем всегда располагаются два вектора. Необходимо создать кратчайший путь с помощью перпендикуляров . Я не знаю как выразится, но хотелось бы чтобы кратчайший путь состоял из отрезков точки которых находятся в ДВУМЕРНОМ пространстве.
Как не надо делать (скриншот 1)

Случай первый (скриншот 2):

Вектор А1-А2
(X,Y,Z)
A1 (143,604, -106,206, 1,958)
A2 (145,010, -106,530, 1,958)
Вектор B1-B2
(X,Y,Z)
B1 (140,200, -108,156, -0,0656)
B2 (149,279, -110,252, -0,0656)

Случай второй (скриншот 3):


Вектор А1-А2
(X,Y,Z)
A1(143,6040 -120,821, 16,5740)
A2 (145,010, -121,1463, 16,5740)

Вектор B1-B2
(X,Y,Z)
B1 (146,274, -120,6302, 13,385)
B2 (146,274, -120,6302, 18,307)

Объясните пожалуйста:
1) Если есть алгоритмы, то как они называются и есть ли на них ссылки?
2) Я программирую на Python и хотелось бы программе объяснить за счет чего можно объяснить коду, чтобы он проделал все так как я показал в 1 и во втором случае (делает он у меня как на скрине "КАК НЕ НАДО"). Либо делает, но тогда работает он топорно.
3) Как бы вы решили этот вопрос

Заранее благодарю вас!
Миниатюры
Нахождение кратчайшего пути в трехмерной системе координат   Нахождение кратчайшего пути в трехмерной системе координат   Нахождение кратчайшего пути в трехмерной системе координат  

0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.10.2021, 11:09
Ответы с готовыми решениями:

Поиск кратчайшего пути в списке координат
Дан список координат точек плоскости: points = Необходимо найти кратчайший путь между координатами. Например для...

Точка в трехмерной системе координат
1. Создайте структуру описывающую в трехмерной системе координат (x, y, z). Найдите расточник между двумя точками A(x1, y1,z1) и B(x1,y1,z1)

Куб в трёхмерной системе координат
Здравствуйте! Моя задача: с клавиатуры (через Edit'ы) ввести координаты точек (X,Y,Z) куба и построить его на канве. Систему координат...

10
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
17.10.2021, 11:35
champforgame, получается, что всегда существует плоскость, параллельная одному из векторов, таким образом, что и второй вектор либо параллелен ей, либо его проекцией является точка?
Или это так получилось в примерах?
0
0 / 0 / 0
Регистрация: 09.12.2015
Сообщений: 5
17.10.2021, 11:40  [ТС]
Хотелось бы получить алгоритм при котором было бы возможно осуществить первый (случай 1) и второй вариант (случай 2)
0
Эксперт Python
 Аватар для dondublon
4649 / 2069 / 366
Регистрация: 17.03.2012
Сообщений: 10,176
Записей в блоге: 6
18.10.2021, 14:08
Цитата Сообщение от champforgame Посмотреть сообщение
В нем всегда располагаются два вектора. Необходимо создать кратчайший путь с помощью перпендикуляров .
Ничего не понял.
Располагаются, и что? Какие вектора, что с ними дальше делаем?
Цитата Сообщение от champforgame Посмотреть сообщение
Я не знаю как выразится, но хотелось бы чтобы кратчайший путь состоял из отрезков точки которых находятся в ДВУМЕРНОМ пространстве.
У отрезка точки всегда находятся в одной плоскости, и даже более того, на одной прямой. Связь этих отрезков с векторами из предыдущего фрагмента также неясна.
Перепишите условие.
0
0 / 0 / 0
Регистрация: 09.12.2015
Сообщений: 5
18.10.2021, 16:46  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
У отрезка точки всегда находятся в одной плоскости, и даже более того, на одной прямой. Связь этих отрезков с векторами из предыдущего фрагмента также неясна.
Перепишите условие.
Да , вы правы, давайте все заного.

ИСХОДНЫЕ ДАННЫЕ
Имеется трехмерное пространство. В нем имеет прямоугольный объект (батарея радиатора), от него отходит труба, представляющая собой отрезок с точками А1-А2. Рядом с ними находится главный трубопровод под уклоном , представляет собой отрезок B1-B2. Координаты точке на картинке.
https://ibb.co/dryD2MT
НАЙТИ
Как найти точки С и С2?. По этим точкам построить отрезок С-С2. Главное условие отрезка С-С2, чтобы он был перпендикулярен B1-B2

Добавлено через 5 минут
https://yapx.ru/v/Oo9Ej

Хотелось бы в итоге это получить
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
18.10.2021, 20:17
champforgame, Для параллельных труб:
- разница по Z (высоте)
- расстояние между прямыми в XOY

Для "перпендикулярных":
- расстояние от "точки" проекции вектора В на ХОУ до прямой вектора А (есть точка пересечения "N")
- минимум (от N до В1; от N до В2)
0
Эксперт Python
 Аватар для dondublon
4649 / 2069 / 366
Регистрация: 17.03.2012
Сообщений: 10,176
Записей в блоге: 6
18.10.2021, 21:58
champforgame, какие ещё есть ограничения?
Так-то перпендикуляр построить нетрудно.
Но вообще это задача по математике, а не по питону.
0
0 / 0 / 0
Регистрация: 09.12.2015
Сообщений: 5
18.10.2021, 22:21  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
какие ещё есть ограничения?
Так-то перпендикуляр построить нетрудно.
Но вообще это задача по математике, а не по питону
В питоне возможно ли это сделать? Я пользуюсь инструментами Revit API , там есть линии, точки, вектора.
0
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
18.10.2021, 22:34
champforgame, чисто "математически"
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
def fun(a1, a2, b1, b2):
    # уравнение радиатора в ХОУ
    ax1 = a2[1] - a1[1]
    by1 = a1[0] - a2[0]
    c1 = a1[1]*a2[0] - a1[0]*a2[1]
    norm = (ax1**2 + by1**2)**(-.5)
    
    # уравнение стояка в ХОУ
    ax2 = b2[1] - b1[1]
    by2 = b1[0] - b2[0]
    c2 = b1[1]*b2[0] - b1[0]*b2[1]
    
    if b1[2] == b2[2]:
        # обе трубы горизонтальны
        if ax2:
            tmp = abs((c2*ax1/ax2-c1) * norm)
        elif:
            tmp = abs((c2*bx1/bx2-c1) * norm)
        else:
            print('стояка не существует )))')
            return
            
        return round(abs(b1[2] - a1[2]), 3), round(tmp, 3)
    
    else:
        # вертикальный стояк В1-В2
        
        # v1 - расстояние от стояка до прямой а1-а2
        v1 = abs(norm * (ax1*b1[0] + by1*b1[1] + c1))
        
        # коэф "c" уравнения нормали к а1-а2 из точки М
        cm = b1[1]*ax1 - b1[0]*by1
        
        # координаты точки М
        ym = (cm*ax1 - by1*c1) * norm**2
        xm = -(c1 + by1*ym) / ax1
        
        s1 = (xm - a1[0])**2 + (ym - a1[1])**2
        s2 = (xm - a2[0])**2 + (ym - a2[1])**2
        
        # v2 - минимум от точки М до точек отрезка a1 и а2
        v2 = min(s1, s2) **.5
        
        return round(v1, 3), round(v2, 3)
 
 
 
a1 = (143.604, -106.206, 1.958)
a2 = (145.010, -106.530, 1.958)
 
b1 = (140.200, -108.156, -0.0656)
b2 = (149.279, -110.252, -0.0656)
print(fun(a1, a2, b1, b2))
print()
 
a1 = (143.6040 -120.821, 16.5740)
a2 = (145.010, -121.1463, 16.5740)
 
b1 = (146.274, -120.6302, 13.385)
b2 = (146.274, -120.6302, 18.307)
 
print(fun(a1, a2, b1, b2))
0
Эксперт Python
 Аватар для dondublon
4649 / 2069 / 366
Регистрация: 17.03.2012
Сообщений: 10,176
Записей в блоге: 6
18.10.2021, 22:36
champforgame, не знаю, но вряд ли. Я щас по-быстрому глянул, это api для autodesk, т. е. для чертежей.
По-моему, у вас тут мало ограничений, чтобы задача имела единственное решение.
Допустим, от А1 идём прямо вниз. Из любой точки этой прямой (вниз от А1) можно провести перпендикуляр до В1-В2.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
18.10.2021, 22:53
Лучший ответ Сообщение было отмечено champforgame как решение

Решение

h= прямая в 3д по точкам A1 A2
p= плоскость в 3д через точку A1 перпендикулярна h
С2=пересчение плоскости p и отрезка по точкам B1 B2
C2(2,0,0.2)
создана точка A(0,2,0)
q= плоскость в 3д по трем точкам С2 B1 A
i= прямая в 3д по точке A1 параллельна OZ
C=пересечение прямой i и плоскости q
C(2,4,0.2)
Сделано в GeoGebra 5 интерактивная геометрия.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.10.2021, 22:53
Помогаю со студенческими работами здесь

Как строить в трехмерной системе координат
Здравствуйте! Не знаю как строить в трехмерной. В двухмерной просто есть ось абсцисс, ось ординат, проводим перпендикуляры от осей и...

Создание простой фигуры в трёхмерной системе координат
Необходимо нарисовать типа трехмерную фигуру, без opengl. Нашел похожее тут https://www.cyberforum.ru/cpp-builder/thread1330384.html Под...

Создайте структуру,описывающую точку в трехмерной системе координат
Создайте структуру,описывающую точку в трехмерной системе координат (x,y,z). Найдите расстояние между точками A и В.

Построить в трехмерной системе координат ТЕТРАЭДР и осуществить его поворот
Постановка задачи: Построить в трехмерной системе координат ТЕТРАЭДР и осуществить его поворот относительно оси Оу.

Отрисовать набор точек в трехмерной системе координат (с возможностью вращения)
Подскажите, как отрисовать набор точек в трехмерной системе координат с возможностью вращения.


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru