3d векторный расчет в WPF

2

Я рисую две сферы в 3D WPF, которая имеет такие точки, как Point3D (0,0,0) и Point3D (-1,0,1,0,2,0) с радиусом 0,10

Теперь я хочу нарисовать Цилиндр, соединяющий эти сферы, единственное, что у меня для этого - радиус 0,02. Я хочу знать, как вычислить трехмерную точку, высоту, направление и т.д. Для этого цилиндра.

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

    Vector3D v1 = new Vector3D(0, 0, 0);
    Vector3D v2 = new Vector3D(1.0, -1.0, 2.0);

    Vector3D center = v1+ v2/2;
    Vector3D axis = Vector3D.CrossProduct(v1, v2);
    double angle = Vector3D.AngleBetween(v1, v2);
    AxisAngleRotation3D axisAngle = new AxisAngleRotation3D(axis, angle);
    RotateTransform3D myRotateTransform = new RotateTransform3D(axisAngle, center);
    center.X = myRotateTransform.CenterX;
    center.Y = myRotateTransform.CenterY;
    center.Z = myRotateTransform.CenterZ;

но двойной угол = Vector3D.AngleBetween(v1, v2); ruselting NaN

Было бы очень приятно, если бы кто-то мог помочь в этом. Спасибо заранее.

  • 0
    Я не математик, но вектор, определенный как (0, 0, 0), не имеет величины и направления «никуда или везде». Чтобы найти угол между двумя векторами, оба этих вектора должны определить направление. Таким образом, вы никогда не сможете найти угол между нулевым вектором и другим вектором.
Теги:
wpf
3d

2 ответа

1

Вы можете просто использовать RotateTransform3D для вращения цилиндра в нужном направлении.

Вы можете применить преобразование к одному из двух свойств здесь является объяснением параметров

  • 0
    Привет, Саймон. Как рассчитать необходимое направление по этим двум точкам сферы?
  • 0
    Вы, вероятно, просто хотите создать преобразование поворота с помощью AxisAngleRotation3d, который описывает ось, вокруг которой вы хотите повернуть (это будет определять направление вращения) и угол поворота (который «насколько далеко» от этой оси является объектом). повернутый)
0

Направление, в котором вы нуждаетесь, - это вектор между центрами сфер:

direction.x = sphere1.Center.x - sphere2.Center.x;
direction.y = sphere1.Center.y - sphere2.Center.y;
direction.x = sphere1.Center.z - sphere2.Center.z;

Затем разделим их на длину вектора, чтобы получить единичный вектор:

double length = Math.Sqrt(direction.x * direction.x +
                          direction.y * direction.y +
                          direction.z * direction.z);

direction.x /= length;
direction.y /= length;
direction.z /= length;

Затем вы можете использовать это, чтобы вычислить свою матрицу вращения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню