Мне нужно создать список позиций 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, 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
Эта формула всегда будет работать, если ваши смещения находятся вдоль заданных осей (что звучит так, как будто они есть). Это все еще верно, если векторы были повернуты — это свойство, которое вы собираетесь использовать.
Итак, чтобы найти точку, которая была смещена вдоль повернутой плоскости:
vx
а также vy
, выше).Теперь есть некоторые причуды, когда вы делаете ротацию (порядок имеет значение!), Но это основная идея, и ее должно быть достаточно, чтобы вы встали на правильный путь. Удачи!
Других решений пока нет …