• iOS中判断两个圆是否重叠


    #import <Foundation/Foundation.h>
    #import <math.h>
    @interface Point2D : NSObject
    {
        double _x; // x值
        double _y; // y值
    }
    
    // x值的getter和setter
    - (void)setX:(double)x;
    - (double)x;
    
    // y值的getter和setter
    - (void)setY:(double)y;
    - (double)y;
    
    
    // 同时设置x和y
    - (void)setX:(double)x andY:(double)y;
    
    //计算根其他点距离
    - (double)distanceWithOther:(Point2D *)other;
    
    //类方法计算两个点之间的距离
    + (double)distanceWithOther1:(Point2D *)p1 andPoint2:(Point2D *)p2;
    
    @end
    
    
    
    
    
    
    
    @implementation Point2D
    
    // x值的getter和setter
    - (void)setX:(double)x
    {
        self->_x = x;
    }
    - (double)x
    {
        return _x;
    }
    
    // y值的getter和setter
    - (void)setY:(double)y
    {
        self->_y = y;
    }
    - (double)y
    {
        return _y;
    }
    // 同时设置x和y
    - (void)setX:(double)x andY:(double)y
    {
        [self setX:x];
        [self setY:y];
    }
    
    //计算两个点之间的距离
    - (double)distanceWithOther:(Point2D *)other
    {
        //return [Point2D distanceWithOther1:self andPoint2:other];
        double xDelta = [self x] - [other x];
        
        double xDeltaPF = pow(xDelta, 2);
        
        double yDelta = [self y] - [other y];
        
        double yDeltaPF = pow(yDelta, 2);
        
        return sqrt(xDeltaPF + yDeltaPF);
    }
    //类方法计算两个点之间的距离
    + (double)distanceWithOther1:(Point2D *)p1 andPoint2:(Point2D *)p2
    {
        // 调用在类方法中的对方法
        return [p1 distanceWithOther:p2];
    }
    @end
    
    
    
    @interface Circle : NSObject
    {
        //半径
        double _radius;
        //圆心
        Point2D *_point;
    }
    
    // 半径的getter和setter
    - (void)setRadius:(double)radius;
    - (double)radius;
    
    //圆心的getter和setter
    - (void)setPoint:(Point2D *)point;
    - (Point2D *)point;
    
    //判断两个圆是否重叠
    //类方法
    + (BOOL)isInteractBetweenCircle1:(Circle *)c1 andCircle2:(Circle *)c2;
    //对象方法
    - (BOOL)isInteractBetweenCircle:(Circle *)other;
    
    @end
    
    @implementation Circle
    
    // 半径的getter和setter
    - (void)setRadius:(double)radius
    {
        _radius = radius;
    }
    - (double)radius
    {
        return _radius;
    }
    
    //圆心的getter和setter
    - (void)setPoint:(Point2D *)point
    {
        _point = point;
    }
    - (Point2D *)point;
    {
        return _point;
    }
    
    
    
    //对象方法
    - (BOOL)isInteractBetweenCircle:(Circle *)other
    {
    //看圆心距离和半径长度关系
        //圆心长度
        Point2D *p1 = [self point];
        Point2D *p2 = [other point];
        double distance = [p1 distanceWithOther:p2]; //5
        //半径和
        NSLog(@"圆心长 %f",distance);
        double radiusSum = [self radius] + [other radius];  //7
         NSLog(@"半径长 %f",radiusSum);
        return distance < radiusSum;
    }
    //判断是否重叠
    + (BOOL)isInteractBetweenCircle1:(Circle *)c1 andCircle2:(Circle *)c2
    {
        return [c1 isInteractBetweenCircle:c2];
    }
    @end
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    int main()
    {
        //凡是对象都有*
        /*
        Point2D *p1 = [Point2D new];
        [p1 setX:10 andY:15];
        
        Point2D *p2 = [Point2D new];
        
        [p2 setX:10 andY:12];
        
        //double d1 = [p1 distanceWithOther:p2];
        double d1 = [Point2D distanceWithOther1:p1 andPoint2:p2];
        NSLog(@"%f ", d1);
        
        */
        //c1
        Circle *c1 = [Circle new];
        [c1 setRadius:5];
        Point2D *p1 = [Point2D new];
        
        [p1 setX:10 andY:15];
        
        [c1 setPoint:p1];
        
        [[c1 point] setX:15];
        //c1 5  (15,15)
        //c2
        Circle *c2 = [Circle new];
        [c2 setRadius:2];
        Point2D *p2 = [Point2D new];
        
        [p2 setX:12 andY:19];
        //设置圆心
        [c2 setPoint:p2];
        
        //c2 2 (12,19)
        BOOL b1 = [c1 isInteractBetweenCircle:c2];
        NSLog(@"%d",b1);
        if (b1) {
            NSLog(@"重叠");
        }else
            NSLog(@"不重叠");
        return 0;
    }
  • 相关阅读:
    如何使用Python的Django框架创建自己的网站
    AJPFX总结内部类
    AJPFX总结OpenJDK 和 HashMap大量数据处理时,避免垃圾回收延迟的技巧二
    AJPFX总结OpenJDK 和 HashMap大量数据处理时,避免垃圾回收延迟的技巧一
    AJPFX总结面向对象(this和super的区别和应用)
    AJPFX关于读取properties 配置文件 返回属性值
    AJPFX关于java中的方法
    AJPFX关于表结构的相关语句
    AJPFX关于Swing组件的总结
    AJPFX:不用递归巧妙求出1000的阶乘所有零和尾部零的个数
  • 原文地址:https://www.cnblogs.com/wohaoxue/p/4694166.html
Copyright © 2020-2023  润新知