我正在开发一个Android应用,它提取相对于旋转的Quaternion
,然后将其axis/angle
表示发送到C#
,以便操作向量的3D旋转。
我需要在Android
之外(在我的C#
应用程序中)完成此操作,但是为了测试我在Android
和C#
进行测试以确保结果是一样的。
结果不一样,我注意到Quaternion
中的C#
与Android
上的原始C#
不同。
我假设这是因为Android
和Quaternion q = (Quaternion) bundle.getSerializable("QUATERNION");
Vector3 axis = new Vector3();
q.getAxisAngle(axis);
float angle = q.getAngle();
使用不同的参考坐标系。
这是我的代码:
在Android上。从libgdx
导入的Quaternion和Vector3Vector3 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
中所做的那样?
我对此感到非常疯狂......
先谢谢你们!