标签: quaternions

2 个 4x4 矩阵之间的插值

对于使用 colladas 的骨骼动画,我需要在 2 个矩阵之间进行线性插值。我在某处看到我可以使用四元数在矩阵之间进行插值,但这仅适用于旋转分量,而且我还需要保留变换。这是我的代码,除了翻译部分外,它都有效:

float total = (orderedBones[i]->Animation->keyFrames[nextKeyFrame] - orderedBones[i]->Animation->keyFrames[nextKeyFrame - 1]) * 100.0;
float progress = orderedBones[i]->Animation->accumTime - orderedBones[i]->Animation->keyFrames[nextKeyFrame - 1] * 100.0;
float interpolation = progress / total;

glm::quat firstQuat = glm::quat_cast(orderedBones[i]->Animation->Matrices[nextKeyFrame - 1]);
glm::quat secondQuat = glm::quat_cast(orderedBones[i]->Animation->Matrices[nextKeyFrame]);
glm::quat finalQuat = glm::slerp(firstQuat, secondQuat, interpolation);

orderedBones[i]->Animation->interpoltaedMatrix = glm::mat4_cast(finalQuat);
Run Code Online (Sandbox Code Playgroud)

有什么办法可以做到这一点吗?

interpolation matrix quaternions

1
推荐指数
1
解决办法
2268
查看次数

Android获取四元数数据

快速简单。如何从传感器获取四元数数据?基本上我需要:

float quaternion_x = ?
float quaternion_y = ?
float quaternion_z = ?
float quaternion_w = ?
Run Code Online (Sandbox Code Playgroud)

我有这样的事情:

if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR)
{
    float[] values = event.values;

    float quaternion_x = values[0];
    float quaternion_y = values[1];
    float quaternion_z = values[2];
    float quaternion_w = values[3];  <----- ERROR HERE 
}
Run Code Online (Sandbox Code Playgroud)

我得到一个超出范围的异常的索引,因为值内部只有3个值。根据此页面:http : //developer.android.com/guide/topics/sensors/sensors_motion.html 应该有4个值,还是我理解错了?

android quaternions android-sensors

1
推荐指数
1
解决办法
2747
查看次数

将四元数拆分为轴旋转

我有一个代表物体方向的四元数(黄色框和球体)。我想知道是否可以将该四元数拆分为其他四元数,从而为我们提供每个局部轴(X、Y 和 Z)的旋转。

由于我没有足够的声誉直接发布图像,我只能放置图像的链接

到目前为止我一直在做的是获取欧拉表示并使用它,但这不是我的特定情况的正确解决方案:

给定两个点(蓝色框),我想限制对象的方向,以便它不能指向灰色平面之外,即使我的四元数看起来不在该平面之外。
我想分割(分解)四元数,因为当我的对象达到平面的极限(例如右侧)时,我想让它留在那里(在该组件中),然后在垂直组件中旋转我的对象,使用新的分割四元数之一。

我正在与 Unity 合作。

我希望我的问题可以理解:)

split rotation quaternions euler-angles unity-game-engine

1
推荐指数
1
解决办法
5159
查看次数

如何将四元数转换为角度?

我正在尝试使用https://docs.microsoft.com/en-us/xamarin/essentials/orientation-sensor上的这个库来计算设备的俯仰、偏航和滚转。图书馆工作,并以四元数返回。

我希望能够将这个四元数转换为 360 度空间中的俯仰、偏航和滚动,以及从 0 到 100 的百分比,表示设备“向”360 度旋转的距离。

我一直在研究这个,并发现了各种数学方程,用数学符号表示,如何实现这样的事情。这些文件还讨论了欧拉角、弧度和其他各种我没有任何概念的概念。

C# 中有没有办法将四元数转换为 a) 360 度空间中的角度,以及 b) 设备在某个轴上旋转的 0-100 百分比?

谢谢!

c# quaternions xamarin xamarin.forms

1
推荐指数
1
解决办法
4374
查看次数

如何获得两个四元数之间的 Vector3 旋转

Rigidbody我正在编写一个使用 a旋转 a 的脚本Configurable Joint。我已经弄清楚targetRotation了,但现在我正在努力解决targetAngularVelocity,如果设置正确,这应该可以帮助我避免不稳定。

targetAngularVelocity在文档中定义如下:“这是一个Vector3。它定义了关节应旋转到的所需角速度”。问题是我不知道如何Vector3根据两个Quaternions对象的当前旋转和目标旋转来获得它。

难道是我理解不正确?是否有一个函数返回基于两个的旋转向量Quaternions

c# quaternions unity-game-engine

1
推荐指数
1
解决办法
1540
查看次数

使用 class_eval 时如何定义类方法:[]

我正在使用四元数 gem,并希望为 :[] 运算符定义一个类方法,该方法从数组创建新的四元数。我努力了

Quaternion.class_eval do
  def self.[ary]
    Quaternion.new(*ary)
  end
end
Run Code Online (Sandbox Code Playgroud)

但这会产生语法错误。我该怎么做呢?

ruby quaternions

1
推荐指数
1
解决办法
62
查看次数

如何确定3D平面的哪一侧显示?

这是一个3d n00b问题.

我正在研究一个WPF控件,它实现了Silverlight的PerspectiveTransform功能的基础,允许2D平面在三个轴中的任何一个上旋转.它工作得很好.然而,我有点困在确定飞机后部是否显示所需的数学上.我现在想出的天真代码是:

bool isBackShowing = Math.Abs(RotationX) > 90 && Math.Abs(RotationY) < 90;
if (!isBackShowing)
{
    isBackShowing = Math.Abs(RotationX) < 90 && Math.Abs(RotationY) > 90;
}
Run Code Online (Sandbox Code Playgroud)

但是,当任一轴上的旋转在+ -270和+ -360之间时,这会失败.

底层变换使用Quaternion对象进行实际旋转,并且具有良好的Axis和Angle属性,所以我猜我可以使用它,如果我知道如何.

3d wpf quaternions

0
推荐指数
1
解决办法
287
查看次数

如何将标量乘法应用于四元数

所以,我正在将一些c ++转换为javascript,我真的需要知道D3DX如何定义它们的四元数运算符.

 //Here's the c++ version
 D3DXQUATERNION Qvel = 0.5f * otherQuat* D3DXQUATERNION(angVel.x, angVel.y, angVel.z, 0);


 //Here's the js quat multiplication
   function quat_mul(q1, q2) {            
   return 
    [q1.x * q2.w + q1.y * q2.z - q1.z * q2.y + q1.w * q2.x,
    -q1.x * q2.z + q1.y * q2.w + q1.z * q2.x + q1.w * q2.y,
     q1.x * q2.y - q1.y * q2.x + q1.z * q2.w + q1.w * q2.z,
    -q1.x * q2.x - q1.y * q2.y - q1.z …
Run Code Online (Sandbox Code Playgroud)

javascript c++ scalar direct3d quaternions

0
推荐指数
1
解决办法
4583
查看次数

确定四元旋转是顺时针还是逆时针

我使用以下代码来将我的玩家模型旋转到鼠标的位置。

void Update() {
    // Generate a plane that intersects the transform's position with an upwards normal.
    Plane playerPlane = new Plane(Vector3.up, transform.position);

    // Generate a ray from the cursor position
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

    // Determine the point where the cursor ray intersects the plane.
    // This will be the point that the object must look towards to be looking at the mouse.
    // Raycasting to a Plane object only gives us a distance, so we'll have to take …
Run Code Online (Sandbox Code Playgroud)

quaternions unity-game-engine

0
推荐指数
1
解决办法
6288
查看次数

防止四元数绕某些轴旋转

我正在用鼠标编程相机控件。我希望用户能够向上或向下或向左或向右查找,但不能向一侧“倾斜”。换句话说,我想允许Yaw和Pitch更改,但将Roll限制为0。

如何防止四元数绕某个轴旋转?当我仅允许自己进行x轴旋转或y轴旋转时,一切正常,但是当由于某种原因同时允许两者时,y旋转会受到影响,并且相机会向侧面倾斜。

c++ math rotation quaternions unity-game-engine

0
推荐指数
1
解决办法
181
查看次数