ios 加速传感器UIAccelerometer

STM32 ST-LINK Utility 无法烧录程序的解决方法 当你打开STM32 ST-LINK Utility,硬件连接好st-link V2,打开了要烧写的文件,点那个Program verify烧录时, 如果出错了: Programming error @ 0x08000000! 我的方法是: 点你想要烧录那个HEX文件的小格,复制 然后去到你前面的文件的格子里,点粘贴: 成功! ... 阅读详情

加速计(UIAccelerometer)是一个单例模式的类,所以需要通过方法sharedAccelerometer获取其唯一的实例。
加速计需要设置的主要有两个:
一个是设置其代理,用以执行获取加速计信息的方法;
 另一个是设置加速计获取信息的频率。 最高支持每秒100次。

UIAccelerometer *accelerometer = [UIAccelerometersharedAccelerometer];

accelerometer.delegate =self;

accelerometer.updateInterval =1.0/30.0f;


下面是加速计的代理方法,需要符合协议<UIAccelerometerDelegate>.

-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration

{

//    NSString *str = [NSString stringWithFormat:@"x:%g\ty:%g\tz:%g",acceleration.x,acceleration.y,acceleration.z];

//    NSLog(@"%@",str);


   //检测摇动, 1.5为轻摇,2.0为重摇

//    if (fabsf(acceleration.x)>1.8||

//        fabsf(acceleration.y)>1.8||

//        fabsf(acceleration.z>1.8)) {

//        NSLog(@"你摇动我了~");

//    }

    static NSInteger shakeCount = 0;

    static NSDate *shakeStart;

    NSDate *now = [[NSDate alloc]init];

    NSDate *checkDate = [[NSDate alloc]initWithTimeInterval:1.5fsinceDate:shakeStart];

    if ([now compare:checkDate] == NSOrderedDescending || shakeStart == nil) {

        shakeCount =0;

        [shakeStart release];

        shakeStart = [[NSDatealloc]init];

    }

    [now release];

    [checkDate release];

    

    if (fabsf(acceleration.x)>1.7||

        fabsf(acceleration.y)>1.7||

        fabsf(acceleration.z)>1.7) {

        shakeCount ++;

        if (shakeCount >4) {

            NSLog(@"你摇动我了~");

            shakeCount =0;

            [shakeStartrelease];

            shakeStart = [[NSDatealloc]init];

        }

    }

}



iphone静止时受到的地球引力为1g,这是加速计确定手机朝向的基础。分为三个轴x,y,z,如果手机以任何方式垂直水平放置,这1g的力将分布在一条轴上,如果设备倾斜,将分布在多条轴上。

    可通过UIAccelerometer单例来使用加速计。UIAccelerometer定义了一种协议————UIAcceleromerterDelegateProtocol,必须实现他才能获得加速计的测量值,代理将以设定的频率收到更新。

  让应用程序使用加速器有三步:获取单例,指定代理,指定频率

  UIAccelerometer *accelerometer=[UIAccelerometer sharedAccelerometer];

  accelerometer.delegate=self;

  accelerometer.updateInterval=0.1//10 times per sec

 其中UIAccelerometerDelegateProtocol只有一个方法:accelerometer:didAccelerate 他将UIAccelerate单例和一个UIAcceleration对象作为参数。UIAcceleration对象通过属性提供了三个轴的当前读数以及测量读数的时间。

   检测朝向,我们来创建个小实验,来指出iphone当前处于正立,倒立,左立,右立,正面朝向和正面朝下。

首先在h文件中添加一个label 并property一下

在xib中连接好设置的控件,我们用label显示手机的位置情况

   下面我们来实现UIAccelerometerDelegate协议,所以我们将视图控制器指定为加速器代理,频率也不用太高,每秒两次就够了。可以在viewdidload方法中指定代理和更新间隔。

    我们剩下的唯一工作就是实现accelerometer:didAccelerate方法了,我们使用UIAcceleration对象的xyz属性来判断那个轴上的重力最大,因此可将读数设置为大于0.5或小于-0.5

   下面我们来修改m中的代码,

   #pragma mark -

   #pragma mark UIAccelerometerDelegate

    -(void)accelerometer:(UIAccelerometer *)accelerometer

      didAcceler:(UIAcceleration *)acceleration

{

if(acceleration.x>0.5)

{

orientation.text=@"Right side";

}

else if(acceleration.x<-0.5)

{

orientation.text=@"left side";

}

else if(acceleration.y>0.5)

{

orientation.text=@"upsid down";

}

else if(acceleratrion.y<-0.5)

{

orientation.text=@"standing up";

}

else if(acceleration.z>.5)

{

orientation.text=@"facedown";

}

else if(acceleration.z<-0.5)

{

orientation.text=@"face up";

}

 

}     

下面我在viewdidload中添加刚才上述的获取加速器的三步,就可以完成这个小实验了

 检测手机倾斜

 我们玩的赛车游戏中,应该就是用的这个检测倾斜来控制方向的,学会了这个,我们就可以做个小游戏了,下面我们来做个小实验

  首先还是在h中添加UIAccelerometerDelegate,然后创建个UIView,property一下,在xib中,吧background设置为一种颜色。把做好的背景和刚刚的UIview连接。

  下面我们在UIAccelerometerDelegate中实现协议,我们在这个试验中只考虑x轴的倾斜程度,也就是说读数越接近1.0 -1.0颜色越纯。接近0设置为透明。我们用fabs()方法来获取绝对值,这样就不用考虑iphone向哪个方向倾斜了

下面我们来实现这个delegate的方法

-(void)accelerometer:(UIAcclerometer *)accelerometer

  didAccelerate:(UIAcceleration *)acceleration

{

 UIAccelerationValue value=fabs(acceleration.x);

if(value>1.0){value=1.0}

colorView.alpha=value;

}

最后我们还是在viewdidload中加入开始提到的那三步。

 到深夜了,天津海河边上就是冷啊,这屋子里面和冰箱一样,很困了,我们再来说最后的,加速器如何检测iphone的移动呢。

  其实iphone有两种方法检测,一种是找出大于1g的力,适合快速移动时候的检测,一种是实现一个过滤器,来计算重力与加速计测量到的力的差,并认为这种差导致iphone在空间中移动。

  下面我们还是写一个小程序,让用户能在6个方向之一快速移动来改变屏幕颜色。

  -(void)setBaseColor:(UIAcceleration *)acceleration

{

if(acceleration.x>1.3)

{

colorView。backgroundcolor=[UIcolor greencolor];

}

else if(acceleration.x<-1.3)

{

colorVIew.backgroundcolor=[UIcolor orangecolor];

}

.....(此处略去其他方向的代码了)

}

 

-(void)accelerometer:(UIAcclerometer *)accelerometer

  didAccelerate:(UIAcceleration *)acceleration

{

[self setbasecoulor:acceleration];

 UIAccelerationValue value=fabs(acceleration.x);

if(value>1.0){value=1.0}

colorView.alpha=value;

}

 

}


UIAccelerometer加速计是用来检测iphone手机在x.y.z轴三个轴上的加速度。要获得此类调用:

UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
同时,你需要设置它的delegate。
UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
accelerometer.delegate = self;
accelerometer.updateInterval = 1.0/60.0;
委托方法:- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration中的UIAcceleration是表示加速度类。包含了来自加速计UIAccelerometer的真是数据。它有3个属性的值x、y、z。iphone的加速计支持最高以每秒100次的频率进行轮询。此时是60次。
1) 应用程序可以通过加速计来检测摇动,如:用户可以通过摇动iphone擦除绘图。
也可以用户连续摇动几次iphone,执行一些特殊的代码:
- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
static NSInteger shakeCount = 0;
static NSDate *shakeStart;
NSDate *now = [[NSDate alloc] init];
NSDate *checkDate = [[NSDate alloc] initWithTimeInterval:1.5f sinceDate:shakeStart];
if ([now compare:checkDate] == NSOrderedDescending || shakeStart == nil)
{
shakeCount = 0;
[shakeStart release];
shakeStart = [[NSDate alloc] init];
}
[now release];
[checkDate release];
if (fabsf(acceleration.x) > 2.0 || fabsf(acceleration.y) > 2.0 || fabsf(acceleration.z) > 2.0)
{
shakeCount++;
if (shakeCount > 4)
{
// -- DO Something
shakeCount = 0;
[shakeStart release];
shakeStart = [[NSDate alloc] init];
}
}
}
2) 加速计最常见的是用作游戏控制器。在游戏中使用加速计控制对象的移动!在简单情况下,可能只需获取一个轴的值,乘上某个数(灵敏度),然后添加到所控制对象的坐标系中。在复杂的游戏中,因为所建立的物理模型更加真实,所以必须根据加速计返回的值调整所控制对象的速度。


在cocos2d中接收加速计输入input.使其平滑运动,一般不会去直接改变对象的position.通过:
- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
// -- controls how quickly velocity decelerates(lower = quicker to change direction)
float deceleration = 0.4; 
// -- determins how sensitive the accelerometer reacts(higher = more sensitive)
float sensitivity = 6.0;
// -- how fast the velocity can be at most
float maxVelocity = 100;
// adjust velocity based on current accelerometer acceleration
playerVelocity.x = playerVelocity.x * deceleration + acceleration.x * sensitivity;
// -- we must limit the maximum velocity of the player sprite, in both directions
if (playerVelocity.x > maxVelocity)
{
playerVelocity.x = maxVelocity;
}
else if (playerVelocity.x < - maxVelocity)
{
playerVelocity.x = - maxVelocity;
}
}
上面deceleration是减速的比率,sensitivity是灵敏度。maxVelocity是最大速度,如果不限制则一直加大就很难停下来。
playerVelocity.x = playerVelocity.x * deceleration + acceleration.x * sensitivity;
中 playervelocity是一个速度向量。是累积的。
- (void) update: (ccTime)delta
{
// -- keep adding up the playerVelocity to the player's position
CGPoint pos = player.position;
pos.x += playerVelocity.x;
// -- The player should also be stopped from going outside the screen
CGSize screenSize = [[CCDirector sharedDirector] winSize];
float imageWidthHalved = [player texture].contentSize.width * 0.5f;
float leftBorderLimit = imageWidthHalved;
float rightBorderLimit = screenSize.width - imageWidthHalved;
// -- preventing the player sprite from moving outside the screen
if (pos.x < leftBorderLimit)
{
pos.x = leftBorderLimit;
playerVelocity = CGPointZero;
}
else if (pos.x > rightBorderLimit)
{
pos.x = rightBorderLimit;
playerVelocity = CGPointZero;
}
// assigning the modified position back
player.position = pos;

}

其他资料:
内置加速计是iPhone和iPodTouch中最酷的特性之一,iPhone可以通过这个小设备知道用户握持手机的方式,以及用户是否移动了手机。iPhoneOS使用加速计处理自动旋转,并且许多游戏都使用他做为控制机制。它还可以用于检测摇动和其他突发的运动。

 

加速计物理学
通过感知特定方向的惯性力总量,加速计可以测量出加速度和重力。iPhone内的加速计是一个三轴加速计,这意味着他能够检测到三维空间中的运动或重力引力。因此,加速计不但可以指示握持电话的方式(如自动旋转功能),而且如果电话放在桌子上的话,还可以指示电话的正面朝下还是朝上。
加速计可以测量g引力,因此加速计返回值为1.0时,表示在特定方向上感知到1g。如果是静止握持iPhone而没有任何运动,那么地球引力对其施加的力大约为1g。如果是纵向竖直地握持iPhone,那么iPhone会检测并报告其y轴上施加的力大约为1g。如果是以一定角度握持iPhone,那么1g的力会分布到不同的轴上,这取决于握持iPhone的方式。在以45度角握持时,1g的力会均匀地分解到两个轴上。


如果检测到的加速计值远大于1g,那么即可以判断这是突然运动。正常使用时,加速计在任一轴上都不会检测到远大于1g的值。如果摇动、坠落或投掷iPhone,那么加速计便会在一个或多个轴上检测到很大的力。
iPhone加速计使用的三轴结构是:iPhone长边的左右是X轴(右为正),短边的上下是Y轴(上为正),垂直于iPhone的是Z轴(正面为正)。需要注意的是,加速计对y坐标轴使用了更标准的惯例,即y轴伸长表示向上的力,这与Quartz2D的坐标系相反。如果加速计使用Quartz 2D做为控制机制,那么必须要转换y坐标轴。使用OpenGL ES时则不需要转换。


 访问加速计
UIAccelerometer类是单独存在的。要获取对此类的引用,请调用sharedAccelerometer方法:

UIAccelerometer *accelerometer=[UIAccelerometersharedAccelerometer];

从加速计获取信息与从CoreLocation获取信息相似。创建一个符合UIAccelerometerDelegate协议的类,执行可以获取加速计信息的方法。
在分配委托时,需要以秒指定更新间隔。iPhone的加速计支持最高以每秒100次的频率进行轮询,但无法保证真正达到这么多次更新,或者可以精确均匀分隔这些更新。要分配委托或指定轮询间隔为每秒60次,可以如下所示:

accelerometer.delegate=self;
accelerometer.updateInterval=1.0f/60.0f;

完成之后,剩余的事情是实现加速计用于更新委托的方法,accelerometer:didAccelerate:。第二个变量包含了来自加速计的真实数据,嵌入在类UIAcceleration的一个对象中。

 UIAcceleration
如前所述,iPhone加速计可以检测3个轴上的加速度,并且对使用UIAcceleration类实例的委托提供此信息。每个UIAcceleration实例都有x、y和z的属性,分别有一个带符号的浮点值。值0表示加速计在此轴上没有检测到任何运动。正值或负值表示一个方向上的力。例如,y的负值表示感受到了向下的力,这可能表示电话是纵向竖直握持的。y的正值表示在向上的方向施加了某些力,这可能意味着电话是倒置的或者电话正在向下运动。(这里有点疑问?说反了吧?)
请在头脑中牢记图15-1的示意图,并查看加速计结果。注意,在现实生活中,几乎不可能获得如此精确的值,因为加速计非常敏感,可以感知非常微笑的运动,而我们通常只能感知立体空间3个轴上的某一个微小受力。这是现实世界中的物理,而不是高中物理实验室。

iPhone开发基础教程笔记(十五)--第十五章 加速计 - supershll - 记忆里

 实现accelerometer:didAccelertae:方法

- (void)accelerometer:(UIAccelerometer *)accelerometerdidAccelerate:(UIAcceleration *)acceleration {
NSString *newText=[[NSString alloc] initWithFormat:@"Max: x:%g\ty:%g\tz:

%g",acceleration.x,acceleration.y,acceleration.z];
label.text=newText;
[newText release];
}

此方法可以在每次调用时更改界面上的标签,调用此方法的频率取决于以前指定的updateInterval的值。

1,检测摇动
加速计通常用于检测摇动。与手势相似,摇动可以作为应用程序输入的一种形式。例如,对于绘图程序GLPaint,iPhone的示例代码之一,用户可以通过摇动iPhone擦除绘图,就像Etch-a-Sketch一样。摇动检测功能相对来说是微不足道的,主需要检查某个轴上的绝对值是否大于阈值(yu)。在正常使用期间,3个轴之一所注册的值通常在1.3g左右,若要远高于此值,则需要刻意施加力量。加速计好像不能注册高于2.3g左右的值。因此,请勿将阈值设置得高于此值。

要检测摇动,请检查绝对值是否大于1.5(表示轻微摇动)和2.0(表示剧烈摇动),代码如下:

- (void)accelerometer:(UIAccelerometer *)accelerometerdidAccelerate:(UIAcceleration *)acceleration {
if (fbasf(acceleration.x)>2.0 ||fbasf(acceleration.y)>2.0 ||fbasf(acceleration.z)>2.0 ) {
//do something here...
}
}

上述方法可以检测到任一轴上任何超过2g力的运动。通过要求用户前后摇动一定次数才能注册为一次摇动,我们可以执行更复杂的摇动检测,代码如下:

- (void)accelerometer:(UIAccelerometer *)accelerometerdidAccelerate:(UIAcceleration *)acceleration {
static NSInteger shakeCount=0;
static NSDate *shakeStart;

NSDate *now=[[NSDate alloc] init];
NSDate *checkDate=[[NSDate alloc] initWithTimeInterval:1.5fsinceDate:shakeStart];

if ([now compare:checkDate]==NSOrderedDescending || shakeStart==nil) {
shakeCount=0;
[shakeStart release];
shakeStart=[[NSDate alloc] init];
}
[now release];
[checkDate release];

if (fbasf(acceleration.x)>2.0 ||fbasf(acceleration.y)>2.0 ||fbasf(acceleration.z)>2.0 ) {
shakeCount++;
if (shakeCount>4) {
//do something
shakeCount=0;
[shakeStart release];
shakeStart=[[NSDate alloc] init];
}
}
}

此方法可以查明加速计报告的值大于2的次数,如果在1.5s的时间内发送了4次,则注册为一次摇动。


2.加速计用作方向控制器
或许加速计在第三方应用程序中最常见的用法是作为游戏控制器。在游戏中不是使用按钮控制字符或对象的移动,而是使用加速计。例如,在赛车游戏中,像转动方向盘那样转到iPhone也许就可以驾驶汽车,而向前倾斜表示加速,向后倾斜表示刹车。
具体如何将加速计用作控制器,这很大程度上取决于游戏的特定机制。在很简单的情况下,可能只需要获取一个轴的值,乘以某个数,然后添加到所控制对象的坐标系中。
使用加速计作为控制器的一个棘手问题是,委托方法并不能保证以指定的间隔回调。如果告诉加速计每秒钟更新60次委托类,所能确定的仅仅是他每秒钟更新的次数绝对不会多于60次。因此不能保证每秒钟得到60次均匀分隔的更新,所以如果所做的动画是基于来自加速计的输入,那么必须要弄清楚委托方法调用之间的时间。

说明 本章中的应用程序在仿真器上不起作用,因为仿真器中没有加速计。

摇动与击碎
我们要编写一个应用程序,他在检测到摇动之后会使电话看起来和听起来好像他因为摇动而破碎一样。启动此应用程序后,程序会显示一张图片,他看起来像是iPhone的首页。
摇动电话时,发出破碎的声音,并更换图片。
然后只需触摸屏幕,就可以重置其初始状态。

 用于击碎的代码
创建一个基于视图的项目ShakeAndBreak。在 15ShakeAndBreak文件夹中找到两张图像和一个声音文件,拖到Resources文件夹中。还有一个icon.png,也添加到Resources文件夹。
展开Resources文件夹中的info.plist,在属性列表中添加一个条目,告诉应用程序不要使用状态栏。单击InformationPropertyList行,单击出现在本行末端的按钮,添加一个新的子值,将新行的Key改为UIStatusBarHidden,然后在右键单击刚才添加的行的空Value列。此时应该出现一个上下文菜单,选择ValueType为Boolean。此行应该变为一个复选框,单击选中此复选框。最后,修改IconFile为icon.png。

然后,展开Classes文件,单击ShakeAndBreakViewController.h:

#define kAccelerationThreshold 2.2
#define kUpdateInterval (1.0f/10.0f)

#import<AudioToolbox/AudioToolbox.h>

@interface ShakeAndBreakViewController:UIViewController<UIAccelerometerDelegate> {
IBOutlet UIImageView *imageView;
BOOL brokenScreenShowing;
SystemSoundId soundID;
UIImage *fixed;
UIIMage *broken;
}
@property ..
@end

我们定义更新频率为1s10次,这已经足够检测到一次摇动。通常来说,轮询时会使用能满足要求的最低频率。在将加速计用作控制器时,需要以相当快的速率轮询,通常达到每秒30次到60次更新。

打开ShakeAndBreakViewController.xib。单击View图标,Cmd+3修改其大小,高度460=》480,将Image View从库中拖到View窗口中。

单击ShakeAndBreakViewController.m:

- (void)viewDidLoad {
UIAccelerometer *accel=[UIAccelerometer sharedAccelerometer];
accel.delegate=self;
accel.updateInterval=kUpdateInterval;

NSString *path=[[NSBundle mainBundle] pathForResource:@"glass"ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURLfileURLWithPath:path],&soundID);

self.fixed=[UIImage imageNamed:@"home.png"];
self.broken=[UIImage imageNamed:@"homebroken.png"];

imageView.image=fixed;
brokenScreenShowing=NO;
}

- (void)accelerometer:(UIAccelerometer *)accelerometerdidAccelerate:(UIAcceleration *)acceleration {
if (! brokenScreenShowing) {
if (acceleration.x >kAccelerationThreshold ||acceleration.y >kAccelerationThreshold ||acceleration.z

>kAccelerationThreshold) {
imageView.image=broken;
AudioServicePlaySystemSound(soundID);
brokenScreenShowing=YES;
}
}
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event
{
imageView.image=fixed;
brokenScreenShowing=NO;
}
@end


滚弹珠程序
我们的下一个小游戏,是通过倾斜电话在iPhone的屏幕上移动弹珠。此处,我们使用Quartz2D来处理动画。在处理游戏或其他需要平滑动画的程序时,通常的规则是使用OpenGL。这里使用Quartz2D是因为他比较简单。

使用基于视图的模版创建一个新项目 Ball。在15Ball文件夹中,找到ball.png,将其添加到Resources文件夹中。
然后单击Classes文件夹,Cmd+N新建UIView subClass,命名为BallView.m。

双击BallViewController.xib,单击View图标,将视图的类改为BallView,将视图的背景颜色改为黑色,然后重新设置File'sOwner的view输出口为BallView。

 实现BallView控制器
单击BallViewController.h:

#define kUpdateInterval (1.0f/60.0f)

@interface BallViewController:UIViewController<UIAccelerometerDelegate> {
}
@end

转到BallViewController.m:

- (void)viewDidLoad {
UIAccelerometer *accel=[UIAccelerometer sharedAccelerometer];
accel.delegate=self;
accel.updateInterval=kUpdateInterval;
[super viewDidLoad];
}

- (void)accelerometer:(UIAccelerometer *)accelerometerdidAccelerate:(UIAcceleration *)acceleration {
[(BallView *)self.view setAcceleration:acceleration];
[(BallView *)self.view draw];
}

 编写Ball View
单击BallView.h:

#define kVelocityMultiplier 500

@interface BallView:UIView {
UIImage *image;
CGPoint currentPoint;
CGPoint previousPoint;

UIAcceleration *acceleration;
CGFloat ballXVelocity;
CGFloat ballYVelocity;
}
- (void)draw;
@end

切换到BallView.m:

- (id)initWithCoder:(NSCoder *)coder {
if (self=[super initWithCoder:coder]) {
self.image=[UIIMage imageNamed:@"ball.png"];
self.currentPoint=CGPointMake((self.bounds.size.width/2.0f)+(image.size.width/ 2.0f),(self.bounds.size.height/2.0f)+(image.size.height /2.0f));

ballXVelocity=0.0f;
ballYVelocity=0.0f;
}
return self;
}

- (void)drawRect:(CGRect) rect {
[image drawAtPoint:currentPoint];
}

- (CGPoint)currentPoint {
return currentPoint;
}

- (void)setCurrentPoint:(CGPoint)newPoint {
previousPoint=currentPoint;
currentPoint=newPoint;

if (currentPoint.x<0) {
currentPoint.x=0;
ballXVelocity=0;
}

if (currentPoint.y<0) {
currentPoint.y=0;
ballYVelocity=0;
}

if (currentPoint.x > self.bounds.size.width-image.size.width ) {
currentPoint.x=self.bounds.size.width -image.size.width;
ballXVelocity=0;
}

if (currentPoint.y > self.bounds.size.height-image.size.height ) {
currentPoint.y=self.bounds.size.height -image.size.height;
ballYVelocity=0;
}

CGRectcurrentImageRect=CGRectMake(currentPoint.x,currentPoint.y,currentPoint.x+image.size.width,currentPoint.y+image.size.height);
CGRectpreviousImageRect=CGRectMake(previousPoint.x,previousPoint.y,previousPoint.x+image.size.width,previousPoint.y+image.size.height);
[selfsetNeedsDisplayInRect:CGRectUnion(currentImageRect,previousImageRect)];
}

- (void)draw {
static NSDate *lastDrawTime;
if (lastDrawTime !=nil) {
NSTimeInterval secondsSinceLastDraw=-([lastDrawTimetimeIntervalSinceNow]);

ballYVelocity=ballYVelocity+-(acceleration.y*secondsSinceLastDraw);
ballXVelocity=ballXVelocity+(acceleration.x*secondsSinceLastDraw);

CGFloat xAcceleration=secondsSinceLastDraw *ballXVelocity*500;
CGFloat yAcceleration=secondsSinceLastDraw *ballYVelocity*500;

self.currentPoint =CGPointMake(self.currentPoint.x+xAcceleration,self.currentPoint.y+yAcceleration);
}
//Update last time with current time
[lastDrawTime release];
lastDrawTime=[[NSDate alloc] init];
}

@end



机器学习 线性回归 头歌实训 第1关:简单线性回归与多元线性回归 第2关:线性回归的正规方程解 第3关:衡量线性回归的性能指标 第4关:scikit-learn线性回归实践 - 波斯顿房价预测 阅读详情

相关推荐

Chapter2、HDR流水线

HDR内容的获取(不同曝光时间的图片合成) 相机响应函数 HDR视频

qq_55621259的博客 2597

iOS传感器之加速计

为什么80%的码农都做不了架构师?>>> ...

weixin_33979745的博客 191

AMCL实战:如何用2D激光雷达在ROS中实现稳定重定位(附参数调优指南)

本文深入解析了在ROS中使用2D激光雷达实现稳定AMCL重定位的实战技巧与参数调优指南。针对粒子发散、位姿跳变等常见问题,文章从算法核心原理出发,系统讲解了初始化、粒子滤波、运动与观测模型等关键参数的分类与调优策略,并提供了一套经过验证的调优框架,帮助开发者提升移动机器人在已知地图环境下的定位鲁棒性和稳定性。

sql99的博客 133

iOS CoreMotion获取传感器数据

attitude:通俗来讲,就是告诉你手机在当前空间的位置和姿势。gravity:重力信息,其本质是重力加速度矢量在当前设备的参考坐标系中的表达。userAcceleration:加速度信息。rotationRate:计时的旋转速率,是陀螺仪的输出。//翻滚//偏航//俯仰//重力加速度在各个方向的分量.gravity.x;.gravity.y;.gravity.z;print("重力X:%f -- Y:%f -- Z:%f", gX, gY, gZ);//检测到晃动。

培根芝士的专栏 2289

Tomcat启动过程中cmd窗口(控制台)中文乱码的问题

tomcat启动时,启动过程日志中文乱码的处理方法。

寻码启示 1942

算法策略 | MACD跨周期短线交易策略开发(股指+商品双版)

量化策略开发,高质量社群,交易思路分享等相关内容

松鼠宽客的博客 2538

swift 加速传感器

加速传感器以前用的UIAccelerometer实现,但是Xcode6后完全放弃了,使用CoreMotion代替它能监听到x,y,z三个方向的加速度,听起来比较炫,实际上使用方法很简单,具体使用步骤如下: 1、实例化CMMotionManager类 2、向CMMotionManager的accelerometerUpdateInterval属性中设置通知间隔时间值。 3、使用NSOperat

NoPolun_iOS的博客 962

Matlab Arduino 硬件支持包安装 MATLAB_Support_Package_for_Arduino_Hardware

Matlab Arduino硬件支持包离线安装

weixin_43283734的博客 2840

Swift - 加速传感器(CoreMotion)的用法,小球加速运动并反弹样例

1,加速传感器可以监听到x,y,z三个方向的加速度,使用步骤如下: (1)实例化CMMotionManager类 (2)向CMMotionManager的accelerometerUpdateInterval属性中设置通知间隔时间值。 (3)使用NSOperationQueue.currentQueue()建立一个监听队列。 (4)使用startAccelerometerUpdatesTo...

weixin_34277853的博客 294

P1003 [NOIP2011 提高组] 铺地毯 python题解

解题思路: 1、根据题意,所有地毯都是挨着铺的,所以最上面的一条符合题意的一定是从后往前数的第一条符合题意的。 2、符合题意要求x和y同时满足大于等于地毯左边坐标并且小于等于地毯右边坐标。 代码如下: n = int(input()) a = [] for i in range(n): a.append(list(map(int,input().split()))) x,y = list(map(int,input().split())) l = len(a) while l > 0: ..

繁华三千东流水不舍昼夜的博客 1620

DAMMFND: Domain-Aware Multimodal Multi-view Fake News Detection

虚假新闻的泛滥不仅严重阻碍了互联网社交媒体的健康发展,还在政治、经济和社会层面造成了实际危害,凸显了自动化虚假新闻检测的重要性(Zhou 等,2015;Cui 等,2019;Zhu 等,2022a;Li 等,2024c,b,a)。现有的虚假新闻检测方法通常聚焦于特定领域的新闻,例如健康或政治领域。然而,在现实世界中,社交媒体上的新闻往往跨越多个领域,这就要求现有的虚假新闻检测方法必须考虑多域泛化(Nan 等,2021;Qi 等,2019;Zhu 等,2022b)。

qq_52053775的博客 337

iOS开发-CoreMotion核心动作开发-陀螺仪CMRotationRate-加速计CMAcceleration-磁强计Magnetometer开发CoreMotion核心动作实践

CoreMotion 核心动作 简介:CoreMotion是iOS系统目前用于处理加速度计,陀螺仪,计步器和环境相关事件。 Core Motion的报告来自iOS设备的板载硬件的运动和环境相关数据,包括加速度计和陀螺仪,以及计步器,磁力计和气压计。您可以使用此框架访问硬件生成的数据,以便在应用程序中使用它。例如,游戏可能使用加速度计和陀螺仪数据来控制屏幕上的游戏行为。 提示: 在iOS 10.0...

伪随机的张三 3945

组合预测 | Python实现LSTM-XGBoost长短期记忆网络组合极限梯度提升树股票价格预测

组合预测 | Python实现LSTM-XGBoost长短期记忆网络和极限梯度提升树股票价格预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2353

IOS学习笔记-加速度传感器(重力感应)-UIAccelerometer

IOS学习笔记-加速度传感器(重力感应)-UIAccelerometer

qq_33777090的博客 7417

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

加速度与加速计(UIAcceleration类,UIAccelerometer类及UIAccelerometerDelegate委托)

备注:以下内容仅适用于iOS 2.0至iOS 4.0版本的SDK。但以下内容中涉及到的概念依然适用于iOS 4.0以后版本的SDK。自iOS 5.0开始,以下内容被放在了Core Motion框架里,且对数据的访问做了统一地管理,同时对数据做了重新定义,比如UIAcceleration已由CMAccelerometerData接管,UIAccelerometer已由CMMotionManager接

wanjf_912的专栏 2854

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

iphone ios UIAccelerometer教程/用法

希望各位能支持一下我们的网站:http://t.cn/zOdAUxJ  提提意见 转载一篇老外的文章 If you like this tutorial, feel free to send me a donation at baseballer1149@aol.com via paypal. First off, the UIAccelerometer is somethi

3299

读书笔记---加速度计

加速度计是一种能够感应设备一个方向上线性加速度的传感器.iOS设备中目前采用的是can'zhou'jia'su'du

woshiwls的专栏 1370

iOS传感器开发——加速度传感器,螺旋仪传感器,磁力传感器的应用

iOS传感器开发——加速度传感器,螺旋仪传感器,磁力传感器的应用 一、引言 通过加速度传感器,螺旋仪传感器和磁力传感,我们可以获取到手机在当前三维空间中的形态,加速度传感器也被称作重力感应。在一些赛车游戏中可以广泛得到应用。在iOS5之前,iPhone支持的传感器有限,关于加速度传感器的管理用UIAccelerometer这个类负...

weixin_33755557的博客 295

加速计

CHENYILONG Blog 加速计(图片版) 博客 加速计和CoreMotion 加速计和CoreMotion 技术博客http://www.cnblogs.com/ChenYilong/新浪微博http://weibo.com/luohanchenyilong 全屏 的iOS中的主要传感器•接近传感器 •加速度传感器-又称...

weixin_30402085的博客 148

加速计 & CoreMotion

CHENYILONG Blog 加速计 & CoreMotion 加速计& CoreMotion 技术博客http://www.cnblogs.com/ChenYilong/新浪微博http://weibo.com/luohanchenyilong Fullscreen iOS中的主要传感器•接近传感器 •加速度传感器-...

weixin_30463341的博客 146

加速计使用

一、UIAccelerometer   使用步骤 //1).获得单例对象 UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer]; //2).设置代理 accelerometer.delegate = self; //3).设置采样间隔 accelerometer.u...

weixin_34413802的博客 101

加速计.陀螺仪的使用

加速计 加速计用来检测手机受到加速度的方向和大小.但是主要用于重力感应,对于运动中得过受力情况就无法准确感应,所以对于运动过程中的感应方向,我们使用陀螺仪. iPhone内置的加速计也叫方向感应器. 感应器通过跟踪期在X.Y.Z轴上面的重力加速度的方向,检测当前设备的方向,比如是平躺着还是倒立着,平面是向上还是向下,手持时iPhone的home键的方向.  还可以通过加速侦测晃动事件. 对应

iosYangming的博客 1911

反弹小球和加速度传感器的使用

反弹小球和加速度传感器的使用(UIAccelerometer) 序言:        我们都见过人家做的小球运动,现在我们一起也做一个自己的小球运动。 今天的小球的效果是:程序运行后,将在画面中间,有一个小球,然后,你倾斜手机,小球将向着手机倾斜的方向飞移动,碰到四壁的时候将会反弹回来。 正文: 首先,我们要讲一下思路; 第一: 在UIViewController的子类里追

风沙岁月 949

加速计原理 IOS4.0之前

// ViewController.m // 06-加速计 // Created by apple on 16/5/6. // Copyright © 2016年 itcast. All rights reserved. #import "ViewController.h...

chengpoujue4939的博客 127
上一篇: IOS开发之——传感器使用
下一篇: UIImageView上面放UIButton不响应事件
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值