Как поместить точку в 3D так, чтобы она создавала определенный угол?

У меня небольшой вопрос по поводу 3D.

Ниже приводится пример моей проблемы.

У меня есть два момента:

A: 12 4 5
B: 6 8 -10

У меня есть еще один момент:
С: 5 6 7

Мне нужно преобразовать (?) Точку C так, чтобы угол ABC составлял 48 градусов.

Как мне это сделать? Буду признателен, если кто-нибудь сможет мне помочь с формулами или даже превратить приведенный выше пример в рабочий.

Другой способ выразить это: как мне преобразовать C.x, C.y и C.z так, чтобы угол ABC был 48 градусов?

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

Примечание:
Я уже реализовал метод нахождения угла:

float Angle( float x1, float y1, float z1,
float x2, float y2, float z2 )
{
float x, y, z;
CrossProduct( x1, y1, z1, x2, y2, z2, &x, &y, &z );

float result = atan2 ( L2Norm( x, y, z ),
DotProduct( x1, y1, z1, x2, y2, z2 ) );

return result;
}

Вы используете его:
Угол (B.x — A.x, B.y — A.y, B.z — A.z,
C.x — B.x, C.y — B.y, C.z — B.z);

3

Решение

       A------C
|
c''   |    c'
B

Поскольку три точки в 3D определяют плоскость, в этой плоскости есть только 2 возможных кандидата для преобразования C -> c ‘или C -> c’ ‘.

Тогда c ‘будет равно c’ = A + t * (B-A) + u * (C-A) с ограничением Normalize (c’-A). dot Normalize (B-A) == cos (48/180 * pi).

Сначала я бы предложил нормализовать D = (B-A), после этого:

D dot D+u*(C-A) = 1 * |D+u(C-A)| * cos (48 degrees)

Dx*(Dx+u*(Cx-Ax))+ Dy*(Dy+u*(Cy-Ay))+Dz*(Dz+u*(Cz-Az)) ==
0.669 * sqrt ((Dx+u*(Cx-Ax))^2+(Dy+u*(Cy-Ay))^2+(Dz+u*(Cz-Az))^2)

Это имеет вид a + u * b == 0,669 * sqrt (c + du + e * u ^ 2), который будет упрощен до полинома второй степени в U возводя в квадрат обе стороны.

2

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

Трек точки C на самом деле представляет собой конус, вы можете себе представить, B — это вершина, а линия AB — центральная линия конуса, что означает, что трехмерный конус симметричен на AB.

0

По вопросам рекламы [email protected]