рдПрдХ рд╕рд╛рде рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди 7.5 рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде, рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдХреЛрдб рдирд╛рдо "рдореИрдВрдЧреЛ" рдХреЗ рддрд╣рдд рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬреАрдкреАрдПрд╕ рдФрд░ рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░, рдПрдХ рдЧрд╛рдпрд░реЛрд╕реНрдХреЛрдк рдФрд░ рдПрдХ рдХрдореНрдкрд╛рд╕ (рдпрд╛ рдмрд▓реНрдХрд┐, рдПрдХ рдореИрдЧреНрдиреЗрдЯреЛрдореАрдЯрд░) рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рдореЛрд╢рди рдПрдкреАрдЖрдИ рдирд╛рдо рдХрд╛ рдПрдХ рдПрдкреАрдЖрдИ рд╕реЗрдЯ рднреА рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рд╕реЗрдВрд╕рд░реЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдЖрдВрджреЛрд▓рди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рд╕рдВрд╕рд╛рдзрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдореЛрд╢рди рдПрдкреАрдЖрдИ Microsoft рдЕрдиреБрд╕рдВрдзрд╛рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдм рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореЛрд╢рди рдПрдкреАрдЖрдИ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдПрдХреНрд╕реЗрд▓реЗрд░реЛрдореАрдЯрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдо рд╕реЗ рдХрдо рдХрдореНрдкрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХрд╛рдлреА рдмрд╛рд░ рдЖрдк рдореЛрд╢рди рд╕реЗрдВрд╕рд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ API Microsoft.Devices.Sensors рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЕрдиреНрдп рд╕рднреА рд╕реЗрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред
рдореЛрд╢рди рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдХреМрди рд╕рд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд░рд╡реИрдпрд╛, рд╣рдореЗрдВ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
- рдкрд┐рдЪ, рд░реЛрд▓, рдпрд╡
- рдЪрд╛рд░ рдХрд╛ рд╕рдореБрджрд╛рдп
- RotationMatrix
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо DeviceAcceleration - рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд░реИрдЦрд┐рдХ рддреНрд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; DeviceRotationRate - рдЙрдкрдХрд░рдг рд░реЛрдЯреЗрд╢рди рдХреА рдЧрддрд┐, рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг - рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рд╡реЗрдХреНрдЯрд░ред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореЛрд╢рди рдПрдкреАрдЖрдИ рдЖрдкрдХреЗ рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдЖрдкрдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗрдВрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдЪрд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдмрд╕ рддреАрд░реЛрдВ рдХреЗ рд░реЛрдЯреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд┐рдЪ, рд░реЛрд▓, рдпрд╡ рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдХреЛрдб рдХреЛ рдПрдХреНрд╕рдПрдПрдордПрд▓ рд╕реНрдЯрд╛рд░реНрдЯ рдкреЗрдЬ рдкрд░ рддреАрд░ рдХреЗ рд╕рд╛рде рд░рдЦреЗрдВ, рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рдФрд░ рдкреЗрдЬ рдХрд╛ рдирд╛рдо рднреА рдмрджрд▓ рджреЗрдВред рддреАрд░реЛрдВ рдХреЛ рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ - рдореИрдВ рдЙрдкрдпреБрдХреНрдд рдорд╛рддреНрд░рд╛ рд╕реЗ рддреАрд░ рдШреБрдорд╛рдКрдВрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрд╕рдПрдПрдордПрд▓ рдкреЙрд▓реАрд▓рд╛рдЗрди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛ рддреАрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╛рдо рджреВрдВрдЧрд╛ред
рдкрд░рд┐рдгрд╛рдореА XAML рдХреЛрдб рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock x:Name="ApplicationTitle" Text=" WINDOWS PHONE" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock x:Name="PageTitle" Text="motion api" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <TextBlock Name="MotionNotPresented" Text=" Motion API" FontSize="22" Visibility="Collapsed"></TextBlock> <Polyline Name="ArrowPitch" HorizontalAlignment="Center" VerticalAlignment="Center" Points="0,0 -10,150 0,140 10,150 0,0" Stroke="Green" StrokeThickness="2" Fill="Green" Margin="-300 -300 0 0"> <Polyline.Projection> <PlaneProjection x:Name="MotionPitchProjection"></PlaneProjection> </Polyline.Projection> </Polyline> <Polyline Name="ArrowRoll" HorizontalAlignment="Center" VerticalAlignment="Center" Points="0,0 -10,150 0,140 10,150 0,0" Stroke="Yellow" StrokeThickness="2" Fill="Yellow" Margin="300 -300 0 0"> <Polyline.Projection> <PlaneProjection x:Name="MotionRollProjection"></PlaneProjection> </Polyline.Projection> </Polyline> <Polyline Name="ArrowYaw" HorizontalAlignment="Center" VerticalAlignment="Center" Points="0,0 -10,150 0,140 10,150 0,0" Stroke="Red" StrokeThickness="2" Fill="Red"> <Polyline.Projection> <PlaneProjection x:Name="MotionYawProjection"></PlaneProjection> </Polyline.Projection> </Polyline> <TextBlock Height="50" HorizontalAlignment="Left" Margin="25,250,0,0" Text="Pitch" VerticalAlignment="Top" FontWeight="Bold" Foreground="Green" FontSize="40" /> <TextBlock FontSize="40" FontWeight="Bold" Foreground="Yellow" Height="50" HorizontalAlignment="Right" Margin="0,250,45,0" Text="Roll" VerticalAlignment="Top" /> <TextBlock FontSize="40" FontWeight="Bold" Foreground="Red" Height="50" HorizontalAlignment="Left" Margin="185,396,0,0" Text="Yaw" VerticalAlignment="Top" /> </Grid>
рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдореЛрд╢рди рдПрдкреАрдЖрдИ рдХреА рдЕрдиреБрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рддреАрд░ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдФрд░ рдПрдХ рдкрд╛рда рд╕рдВрдХреЗрдд рдЬреЛрдбрд╝рд╛ред
рдЕрдм, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ Microsoft.Devices.Sensors рдкрд░ рдПрдХ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХреЛрдб рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирд╛рдорд╕реНрдерд╛рди рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
using Microsoft.Devices.Sensors;
рдореИрдВ API рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реВрдБрдЧрд╛, рдЗрд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реВрдБрдЧрд╛ рдФрд░ рд▓реЛрдбреЗрдб рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдбреЗрдЯрд╛ рдЪреЗрдВрдЬ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реВрдБрдЧрд╛:
Motion motion = null;
Motion_CurrentValueChanged рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рдореБрдЭреЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдФрд░ Z рдЕрдХреНрд╖ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рддреАрд░ рдШреБрдорд╛рдПрдВрдЧреЗ:
void motion_CurrentValueChanged(object sender, SensorReadingEventArgs<MotionReading> e) { Dispatcher.BeginInvoke(() => { MotionPitchProjection.RotationZ = e.SensorReading.Attitude.Pitch * 180 / Math.PI; MotionRollProjection.RotationZ = e.SensorReading.Attitude.Roll * 180 / Math.PI; MotionYawProjection.RotationZ = e.SensorReading.Attitude.Yaw * 180 / Math.PI; }); }
рдЕрдм, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдореНрдкрд╛рд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рдФрд░ рдЕрдзрд┐рдорд╛рдирддрдГ рдХрдореНрдкрд╛рд╕ рдФрд░ рдЬрд╛рдЗрд░реЛрд╕реНрдХреЛрдк рдХреЗ рд╕рд╛рде, рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЪреВрдВрдХрд┐ рдПрдореБрд▓реЗрдЯрд░ рдХрдореНрдкрд╛рд╕ рдпрд╛ рдЬрд╛рдЗрд░реЛрд╕реНрдХреЛрдк рдХрд╛ рдЕрдиреБрдХрд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореЛрд╢рди рдПрдкреАрдЖрдИ рдЗрд╕рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред
рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:рдПрдХ рд╕рд░рд▓ рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдирд╛MSDN рдкрд░ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╕реЗрдВрдЯрд░рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдПрд╕рдбреАрдХреЗ 7.1рд░реВрд╕реА рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рд╡рд┐рдХрд╛рд╕ рдордВрдЪ