углы угловой прямой в 3d

#python-3.x #geometry #coordinates #trigonometry

#python-3.x #геометрия #координаты #тригонометрия

Вопрос:

У меня есть 2 точки в 3D-пространстве (с той же координатой y). Я назову их c и m . Я хочу найти угловые точки (отмеченные на рисунке как p1-p4) квадрата с шириной w . Важно то, что квадрат не параллелен оси x. Если бы это было так, (для p1 примера) Я мог бы просто сделать:

 p1.x = m.x   w / 2
p1.y = m.y   w / 2
p1.z = m.z

 

Как бы я сделал то же самое с угловым квадратом? Это все заданные точки:

 m; c
 

и длины:

 w; d
 

рис1

Ответ №1:

Есть несколько способов сделать это, но вот один способ.

Если две точки гарантированно имеют одинаковое значение y, вы должны быть в состоянии сделать это следующим образом.

Возьмите ‘m — c’ и назовите это u. Нормализовать u. Затем возьмите перекрестное произведение u и оси y, чтобы получить v, вектор, параллельный плоскости xz, которая перпендикулярна u. (Это можно оптимизировать, но вряд ли это будет важно.) Затем возьмите перекрестное произведение u и v, чтобы получить третий вектор, w. Обратите внимание, что вы можете использовать ‘m — c’ или ‘c — m’ или использовать разные порядки для аргументов перекрестного произведения, и это все равно будет работать, но результирующие векторы могут указывать в разных направлениях(но только в противоположных направлениях). Вы также можете выполнить нормализацию в разные моменты процесса и получить те же результаты в конце.

Как только у вас есть m, v и w, вы можете использовать некоторую базовую векторную математику для вычисления углов.

[Правка: я вижу, что у вас есть переменная с именем ‘w’, поэтому я должен уточнить, что ‘w’ в моем примере — это другое ‘w’, чем у вас. Что касается ваших «w» и «d», то они будут учитываться в векторной математике, о которой я упоминал в конце.]

Комментарии:

1. Не могли бы вы, может быть, разобраться, что делать с точками c = (100,100,100); m = (120,100,130)? Я просто не могу понять это.

2. Является ли это частью домашнего задания? Я постараюсь помочь в любом случае — я просто хочу быть осторожным, давая прямой ответ, если это домашнее задание.

3. Хахахах, нет, это не для домашней работы. Это просто личный проект. Я пытаюсь визуализировать фигуры в 3D-пространстве (с которым я работаю) с перспективой. (github.com/DinosaurMoritz/3dConsoleRender ) Теперь я хочу повернуть, так как до сих пор я мог двигаться только вверх, вниз вперед назад, влево и вправо. Я получаю квадрат в rDis (расстояние рендеринга), а затем из каждой точки на этой плоскости я провожу линию до c (камеры), и если она перехватывается, эта точка на плоскости становится темной. С помощью этого я пытаюсь получить плоскость, но под углом. (Я студент, но из средней школы и Германии)

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

5. 1. С точками, которые я предложил в первом комментарии: u = (20,0,30) 2. Нормализовать: (0.55,0,0.83) Теперь я не знаю, как продолжить.