c#quaternion reference system

时间:2018-03-29 13:29:30

标签: c# android libgdx quaternions

我正在开发一个Android应用,它提取相对于旋转的Quaternion,然后将其axis/angle表示发送到C#,以便操作向量的3D旋转。

我需要在Android之外(在我的C#应用程序中)完成此操作,但是为了测试我在AndroidC#进行测试以确保结果是一样的。

结果不一样,我注意到Quaternion中的C#Android上的原始C#不同。

我假设这是因为AndroidQuaternion q = (Quaternion) bundle.getSerializable("QUATERNION"); Vector3 axis = new Vector3(); q.getAxisAngle(axis); float angle = q.getAngle(); 使用不同的参考坐标系。

这是我的代码:

在Android上。从libgdx

导入的Quaternion和Vector3
Vector3 vi = new Vector3(input[0],input[1],input[2]);
Vector3 output = vi.rotate(axis,angle);

我之后做的转变如下:

public static float[] TranslateQuaternion(Vector3 axis, float angle, float x, float y, float z) {
    Vector3 input = new Vector3(x,y,z);
    Quaternion q = Quaternion.CreateFromAxisAngle(axis,angle);
    Console.WriteLine("Quaternion: " + q.ToString());
    Matrix4x4 m = System.Numerics.Matrix4x4.CreateFromAxisAngle(axis,angle);
    Vector3 output = Vector3.Transform(input,m);
    return new float[3]{output.X,output.Y,output.Z};
}

在C#上。 Quaternion和Vector3从System.Numerics

导入
Vector3

我的Quaternion转换导致的结果与我在Android上获得的结果不同,我认为原因是由于Quaternion不同。

我从Android开始的x=0.00 y=-0.67 z=0.01 w=0.74 //The axis I pass to C#: x = -0.00 y=-1.00 z=0.01 angle=83.74 是:

C# Quaternion

虽然我的x=0.00 y=0.86 z=-0,01 w=-0,52 是这样的:

C#

我该如何解决这个问题?我可以做一些映射来匹配坐标系吗?是否有Vector3方式直接从axis/angle Android执行opcache.enable=1 opcache.memory_consumption=256 opcache.interned_strings_buffer=12 opcache.max_accelerated_files=16000 opcache.max_wasted_percentage=5 opcache.validate_timestamps=1 opcache.revalidate_freq=2 opcache.save_comments=0 opcache.enable_file_override=1 opcache.error_log=/var/log/php-opcache.error.log opcache.log_verbosity_level=1 for key in opcache.enable opcache.memory_consumption yadda yadda do sed -i "s/^\($key\).*/\1 $(eval echo \${$key})/" php.ini done 的轮换,就像我在my.variableproperty=1 中所做的那样?

我对此感到非常疯狂......

先谢谢你们!

0 个答案:

没有答案