资讯详情

传感器数据和显示方向 (HTML)

传感器数据和显示方向 (HTML)

12/11/2015

本文内容

[ 本文适用于编写 Windows 应用于运行 Windows 8.x 和 Windows Phone 8.x 如果你想针对开发人员。 Windows 10 开发,请参考 最新文档 ]

来自 Accelerometer、Gyrometer、Compass、Inclinometer 和 OrientationSensor 类传感器数据由其参考轴定义。 这些轴由设备的横向方向定义,并在用户旋转设备时与之一起旋转。 如果您的应用程序支持自动旋转,即如果用户在旋转设备时重定向以适应设备,则在使用它之前必须调整旋转传感器数据。

显示方向和设备方向

为了了解传感器的参考轴,您需要区分显示方向和设备方向。显示方向是方向文本,图像显示在屏幕上,设备方向是设备的物理定位。在下图中,设备和显示方向都被使用 Landscape。

a380b2f7a10b2a2618bba13466dcad0f.png

使用显示在下图中 LandscapeFlipped 显示和设备方向。

下一张图显示了使用 Landscape 显示方向和采用 LandscapeFlipped 设备方向。

你可以使用它 CurrentOrientation 属性的 GetForCurrentView 方法以通过 DisplayInformation 类查询方向值。然后,你可以通过和 DisplayOrientations 对比枚举创造逻辑。 请记住,参考轴的转换必须支持您支持的每个方向。

横向设备和纵向设备优先

制造商现在正在优先生产横向设备和纵向设备。当制造商将组件集成到设备中时,它们以统一一致的方式执行操作,使所有设备都能在相同的参考帧中运行。 下表显示了传感器轴,适用于纵向设备的传感器轴。

方向

优先横向

优先纵向

Landscape

Portrait

LandscapeFlipped

PortraitFlipped

显示方向和指南针方向

指南针的方向取决于参考轴,因此它随设备的方向而变化。 可以基于此表进行修正(假设用户面朝北)。

显示方向

用于指南针方位的参考轴

面朝北方时 API 指南针方位

指南针方向修正

Landscape

-Z

0

方位

Portrait

Y

90

(方位 270)% 360

LandscapeFlipped

Z

180

(方位 180)% 360

PortraitFlipped

Y

270

(方位 90)% 360

修改指南针方向(如表所示),以便正确显示方向,如下所示。

function readingChanged(e) {

var heading = e.reading.headingMagneticNorth;

var displayOffset;

// Calculate the compass heading offset based on

// the current display orientation.

var displayInfo = Windows.Graphics.Display.DisplayInformation.getForCurrentView();

switch (displayInfo.currentOrientation) {

case Windows.Graphics.Display.DisplayOrientations.landscape:

displayOffset = 0;

break;

case Windows.Graphics.Display.DisplayOrientations.portrait:

displayOffset = 270;

break;

case Windows.Graphics.Display.DisplayOrientations.landscapeFlipped:

displayOffset = 180;

break;

case Windows.Graphics.Display.DisplayOrientations.portraitFlipped:

displayOffset = 90;

break;

}

var displayCompensatedHeading = (heading displayOffset) % 360;

// Update the UI...

}

使用加速度计和陀螺测试仪显示方向

该表可示方向的加速度计和陀螺测试仪数据可转换此表。

参考轴

X

Y

Z

Landscape

X

Y

Z

Portrait

Y

-X

Z

LandscapeFlipped

-X

-Y

Z

PortraitFlipped

-Y

X

Z

这些转换可以应用到陀螺测试仪的代码示例。

function readingChanged(e) {

var reading = e.reading;

var displayOffset;

// Calculate the gyrometer axes based on

// the current display orientation.

var displayInfo = Windows.Graphics.Display.DisplayInformation.getForCurrentView();

switch (displayInfo.currentOrientation) {

case Windows.Graphics.Display.DisplayOrientations.landscape:

x_Axis = reading.angularVelocityX;

y_Axis = reading.angularVelocityY;

z_Axis = reading.angularVelocityZ;

break;

case Windows.Graphics.Display.DisplayOrientations.portrait:

x_Axis = reading.angularVelocityY;

y_Axis = -1 * reading.angularVelocityX;

z_Axis = reading.angularVelocityZ;

break;

case Windows.Graphics.Display.DisplayOrientations.landscapeFlipped:

x_Axis = -1 * reading.angularVelocityX;

y_Axis = -1 * reading.angularVelocityY;

z_Axis = reading.angularVelocityZ;

break;

case Windows.Graphics.Display.DisplayOrientations.portraitFlipped:

x_Axis = -1 * reading.angularVelocityY;

y_Axis = reading.angularVelocityX;

z_Axis = reading.angularVelocityZ;

break;

}

// Update the UI...

}

显示方向和设备方向

必须以不同的方式进行更改 OientationSensor。 请考虑逆时针旋转到 Z 轴时的不同方向,因此我们需要反向旋转以返回用户的方向。对于四元数数据,我们可以使用欧拉公式定义参考四元数的旋转,也可以使用参考旋转矩阵。

若要获取所需的相对方向,请用参考对象乘以绝对对象。请注意,此数学算法不可应用交换律。

在之前的表达式中,绝对对象由传感器数据返回。

显示方向

围绕 Z 进行逆时针旋转

参考四元数(反向旋转)

参考旋转矩阵(反向旋转)

Landscape

0

1 + 0i + 0j + 0k

[1 0 0

0 1 0

0 0 1]

Portrait

90

cos(-45⁰) + (i + j + k)*sin(-45⁰)

[0 1 0

-1 0 0

0 0 1]

LandscapeFlipped

180

0 - i - j - k

[1 0 0

0 1 0

0 0 1]

PortraitFlipped

270

cos(-135⁰) + (i + j + k)*sin(-135⁰)

[0 -1 0

1 0 0

0 0 1]

标签: 360x95传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台