Nano Hash - криптовалюты, майнинг, программирование

Поворот 3D-объекта в WPF

У меня есть 3D-прозрачный объект в WPF. Значение непрозрачности кисти, используемой для создания объекта, установлено на 0,25. Мне нужно повернуть этот трехмерный объект вокруг его центральной точки с помощью движения мыши. В настоящее время объект вращается против направления движения мыши. Есть ли у кого-нибудь идеи, как вращать прозрачный объект в 3D пространстве?

Код, используемый для вращения:

public static void DoMouseMoveEvent(object sender, MouseEventArgs e, Transform3DGroup transform3DGroup, System.Windows.Controls.Viewport3D viewport3D, ref Point mLastPos, Point3D centerPoint)
    {
        var pos = Mouse.GetPosition(viewport3D);


        var actualPos = new Point(pos.X - viewport3D.ActualWidth / 2,
              viewport3D.ActualHeight / 2 - pos.Y);
        double dx = actualPos.X - mLastPos.X;
        double dy = actualPos.Y - mLastPos.Y;

        double mouseAngle = 0;

        if (dx != 0 && dy != 0)
        {
            mouseAngle = Math.Asin(Math.Abs(dy) /
                Math.Sqrt(Math.Pow(dx, 2) + Math.Pow(dy, 2)));
            if (dx < 0 && dy > 0) mouseAngle += Math.PI / 2;
            else if (dx < 0 && dy < 0) mouseAngle += Math.PI;
            else if (dx > 0 && dy < 0) mouseAngle += Math.PI * 1.5;
        }
        else if (dx == 0 && dy != 0)
        {
            mouseAngle = Math.Sign(dy) > 0 ? Math.PI / 2 : Math.PI * 1.5;
        }
        else if (dx != 0 && dy == 0)
        {
            mouseAngle = Math.Sign(dx) > 0 ? 0 : Math.PI;
        }

        double axisAngle = mouseAngle + Math.PI / 2;

        var axis = new Vector3D(Math.Cos(axisAngle) * 4, Math.Sin(axisAngle) * 4, 0);

        //axis.Normalize();

        double rotation = 0.02 * Math.Sqrt(Math.Pow(dx, 2) + Math.Pow(dy, 2));

        var r = new QuaternionRotation3D(new Quaternion(axis, rotation * 180 / Math.PI));

        var rotateTransform = new RotateTransform3D(r, centerPoint);            

        transform3DGroup.Children.Add(rotateTransform);

        mLastPos = actualPos;
    }

Может ли причина неправильного поведения заключаться в том, что координата z не фиксируется для вычисления поворота в приведенном выше фрагменте кода?

Спасибо за помощь....

15.11.2010

Ответы:


1

Я думаю, проблема в координате z. Поскольку координата z используется для положения в третьем измерении, если вы не используете эту координату, очень сложно повернуть фигуру в трех измерениях. Если вы рассчитаете координату z, думаю, проблема будет решена

15.11.2010
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..