对于IOS点、线、角的计算

其实都是一些中学的数学知识,不过都忘的差不多了,把用到的写下来,方便以后使用

两点间距离计算:

//计算两个点之间的距离
CGFloat distanceBetweenPoints (CGPoint first, CGPoint second) {
    CGFloat deltaX = second.x - first.x;
    CGFloat deltaY = second.y - first.y;
    return sqrt(deltaX*deltaX + deltaY*deltaY );
};


计算两个点与X轴线的夹角:

/**
 *  计算角度
 *  @param edge 线
 *  @return 角度
 */
-(CGFloat)angleForStartPoint:(CGPoint)startPoint EndPoint:(CGPoint)endPoint{
    
    CGPoint Xpoint = CGPointMake(startPoint.x + 100, startPoint.y);
    
    CGFloat a = endPoint.x - startPoint.x;
    CGFloat b = endPoint.y - startPoint.y;
    CGFloat c = Xpoint.x - startPoint.x;
    CGFloat d = Xpoint.y - startPoint.y;
    
    CGFloat rads = acos(((a*c) + (b*d)) / ((sqrt(a*a + b*b)) * (sqrt(c*c + d*d))));
    
    if (startPoint.y>endPoint.y) {
        rads = -rads;
    }
    return rads;
}

 

对于一个View进行旋转之后,通过view的frame不能准确找到四个角点位置。方法是将四个角点也进行变换,获取到对应的点

-(void)click:(UIButton *)btn{
    
    //获取_view的原点旋转40°后的点的位置
    CGPoint roP = [self rotePoint:40 center: _view.center point: _view.frame.origin scale:1];
    CGAffineTransform rotation = CGAffineTransformMakeRotation(90*M_PI/180);
    
    [_view setTransform:rotation];
    
}


/**
 *  旋转后点的计算
 *
 *  @param angle        旋转角度
 *  @param center       旋转中心点
 *  @param initialPoint 旋转前点的位置
 *  @param scale        旋转变形比例
 *
 *  @return 旋转后点的位置
 */
- (CGPoint)rotePoint:(CGFloat)angle center:(CGPoint)center point:(CGPoint)initialPoint scale:(CGFloat)scale {
    CGFloat x = [self angleForStartPoint:center EndPoint:initialPoint];
    x = -x;
    
    if (x > 0) {
        x = M_PI-x;
    }else{
        x = - M_PI - x;
    }
    
    CGFloat length = distanceBetweenPoints(center, initialPoint) * scale;
    CGFloat ang = x + angle / 180.0 * M_PI;

    NSLog(@"ang = %f",ang * 180/M_PI);
    CGPoint rotatedPoint;
    
    rotatedPoint.x = center.x - length * cos(ang);
    rotatedPoint.y = center.y - length * sin(ang);
    
    return rotatedPoint;
}

 注意:获取旋转点位置的方法调用需要在view调用transForm方法之前,否则得到的点就是二次变形之后的点了,当时还以为是方法有问题,后来发现是代码调用位置不对

posted @ 2016-09-13 17:15  absty_guo  阅读(3260)  评论(0编辑  收藏  举报