gpt4 book ai didi

java - 在java中旋转3d vector

转载 作者:行者123 更新时间:2023-12-01 04:55:45 24 4
gpt4 key购买 nike

我从传感器管理器获取了设备的磁性 XYZ 值。

但是,这些是设备视角的 XYZ 值。

device's point of view

问题是,我希望这些坐标(磁体值的 3d vector )向北旋转。当我随心所欲地转动并握住设备时,我希望看到相同的 XYZ 值。

使用时

SensorManager.getRotationMatrix(R, I, accel, m);
SensorManager.getOrientation(R, v);

我得到 vector v[]中设备方向的XYZ。

现在我需要做什么来旋转原始 vector 以适应北方?

这是我正在寻找的最终结果:

as seen, i get the same xyz values for any orientation of the device

如图所示,对于设备的任何方向我都得到相同的 xyz 值

编辑:

我尝试添加这个:

Location l=null;
GeomagneticField field = new GeomagneticField((float) l.getLatitude(),(float) l.getLongitude(),(float) l.getAltitude(),l.getTime());

并且我从 field.getX() 获得的数据无效(可能是因为我使用了空位置......?)。知道在哪里可以找到示例代码来帮助我吗?

谢谢,沃普斯

最佳答案

好的!我终于能够转动 vector 了。

我使用了迈克的建议并尝试了旋转矩阵的东西..

重点是从 SensorManager 中取出当前旋转矩阵,并将其与磁值的 xyz vector 相乘(取决于设备方向)。

enter image description here

A 是旋转矩阵,xyz 是我的磁值 vector 。

这就是你在代码中编写它的方式

SensorManager.getRotationMatrix(R, I, accel, m);
m[0]=Math.round(m[0]);//X
m[1]=Math.round(m[1]);//Y
m[2]=Math.round(m[2]);//Z
v[0]=Math.round((m[0]*R[0] )+(m[1]*R[1])+(m[2]*R[2]));
v[1]=Math.round((m[0]*R[3] )+(m[1]*R[4])+(m[2]*R[5]));
v[2]=Math.round((m[0]*R[6] )+(m[1]*R[7])+(m[2]*R[8]));

其中“m”是从传感器接收到的磁场值:

public void onSensorChanged(SensorEvent event) {
switch(event.sensor.getType()) {
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(event.values, 0, m, 0, 3);
break;
}
}

关于java - 在java中旋转3d vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14199581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com