Создать набор данных из позиций XYZ на заданной плоскости

Мне нужно создать список позиций XYZ с учетом начальной точки и смещения между позициями на основе плоскости. Просто на плоской плоскости это легко. Допустим, мне нужно смещение, чтобы сдвинуться вниз на 3, затем вправо 2 из положения 0,0,0

Выход будет:

0,0,0 (starting position)
0,-3,0 (move down 3)
2,-3,0 (then move right 2)

То же самое касается другой стартовой позиции, скажем, 5,5,1:

5,5,1 (starting position)
5,2,1 (move down 3)
7,2,1 (then move right 2)

Проблема возникает, когда самолет больше не находится на этой плоской сетке.

Я могу рассчитать уравнение плоскости и вектора нормалей, учитывая 3 балла.
Но что теперь я могу сделать, чтобы создать этот набор данных местоположений XYZ с учетом этого уравнения?

Я знаю, что могу решить для XYZ, учитывая два значения. Скажем, я знаю x = 1 и y = 1, я могу решить для Z. Но движение вниз 2 больше не просто y-2. Я считаю, что мне нужно найти линейное уравнение по осям x и y, чтобы увеличить позиции и двигаться параллельно x и y этой новой плоскости, а затем просто решить для Z. Я не уверен, как это сделать.

Другая проблема заключается в том, что мне нужно рассчитать угол, наклон и поворот этой плоскости относительно базовой плоскости.

Например:

P1=0,0,0 and P2=1,1,0 the tilt=0deg angle=0deg rotation=45deg.
P1=0,0,0 and P2=0,1,1 the tilt=0deg angle=45deg rotation=0deg.
P1=0,0,0 and P2=1,0,1 the tilt=45deg angle=0deg rotation=0deg.
P1=0,0,0 and P2=1,1,1 the tilt=0deg angle=45deg rotation=45deg.

Я часами искал обе эти проблемы и всегда останавливался в уравнении плоскости. Правильно манипулируя x, y, следуя параллельно плоскости, а затем беря эту информацию, чтобы найти эти углы. Это большая геометрия, которую нужно решить, и я не могу найти дополнительную информацию о том, как рассчитать этот список точек, не говоря уже о расчете 3 углов относительно базовой плоскости.

Я бы оценил любую помощь или понимание этого. Просто старая математика или ссылка на C ++ были бы идеальны, чтобы пролить свет на эту проблему, с которой я здесь сталкиваюсь.

Спасибо,
Matt

1

Решение

Вы можете думать о своей плоскости как о точке, обозначенной парой ортонормированная основа векторы (что означает два вектора длиной 1, 90 градусов друг от друга). Ваш самый простой самолет может быть определен как:

p0 = (0, 0, 0) #Origin point
vx = (1, 0, 0) #X basis vector
vy = (0, 1, 0) #Y basis vector

Чтобы найти точку p1 это компенсируется dx в направлении X и dy в направлении Y вы используете эту формулу:

p1 = p0 + dx * vx + dy * vy

Эта формула всегда будет работать, если ваши смещения находятся вдоль заданных осей (что звучит так, как будто они есть). Это все еще верно, если векторы были повернуты — это свойство, которое вы собираетесь использовать.

Итак, чтобы найти точку, которая была смещена вдоль повернутой плоскости:

  1. Возьмите базисные векторы по умолчанию (vx а также vy, выше).
  2. Поворачивайте их до тех пор, пока они не определят нужную вам плоскость (вам может понадобиться, а может и не понадобиться вращать исходную точку, в зависимости от того, как определена проблема).
  3. Примените формулу и получите ответ.

Теперь есть некоторые причуды, когда вы делаете ротацию (порядок имеет значение!), Но это основная идея, и ее должно быть достаточно, чтобы вы встали на правильный путь. Удачи!

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector