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;
}
时间: 2024-08-25 09:38:10

iOS中判断两个圆是否重叠的相关文章

zoj 1608 Two Circles and a Rectangle 判断两个圆是否能放入一个矩形中

题目来源:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=608 分析: 两个圆放到矩形的临界点图为: 其中a为长, b为宽, r1 > r2 红色三角形的三边长分别为: x = a - (r1 +r2) y = b - (r1 + r2) z = r1 +r2 当 x ^ 2 + y ^ 2  >= z^2 时, 显然 矩形是可以放进去圆的. 代码如下: int main() { double w, l , r1 ,r2

iOS中的两种主要架构及其优缺点

凡是程序的开发者,应该对程序的架构都不陌生.一个程序的架构的好坏对这个程序有着非常重要的作用.今天我们来看一下iOS开发中用要的两种主流的程序架构.这个过程中我们主要以例子的形式展开. 我们来看第一种架构:如下图所示: 这种程序的架构主要原理是创建了一个导航控制器来控制页面之间的切换.这种架构一般把主界面作为导航控制器的根视图控制器.在上图所求的程序架构中,主界面管理了四个界面:微信界面,发现界面,联系人界面,关于我界面.如果程序是第一次运行的时候,进入用户指引界面,然后进入登录界面,输入账户名

实验12:Problem D: 判断两个圆之间的关系

Home Web Board ProblemSet Standing Status Statistics Problem D: 判断两个圆之间的关系 Problem D: 判断两个圆之间的关系 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 381  Solved: 325[Submit][Status][Web Board] Description 定义Point类,包括double类型的两个属性,分别表示二维空间中一个点的横纵坐标:定义其必要的构

判断两个区间是否重叠图解

图解:判断两个区间是否重叠 1.正向判断,列出四种重叠的情况,满足其一,则重叠: 2.逆向判断,列出两种不重叠的情况,如果满足其一,则重叠: 优化正向判断:如下图

(算法)判断两个区间是否重叠

题目: 判断两个区间是否重叠 思路: 假设区间表示为[start,end],先存在两个区间A,B. 两个区间的关系有两种:重叠与不重叠 重叠的情况有4种,两种相交,两种包含(很容易想到,此处不示意) 不重叠有两种情况:A在B前面,A在B后面 因此很容易得到判断区间重叠的方法: 1.正向判断,列出四种重叠的情况,满足其一,则重叠: 2.逆向判断,列出两种不重叠的情况,如果满足其一,则重叠: 显然第二种方法更简单. 优化正向判断: 考虑一下正向判断的四种情况,其实只要满足max(A.start,B.

java中判断两个字符串是否相等的问题

我最近刚学java,今天编程的时候就遇到一个棘手的问题,就是关于判断两个字符串是否相等的问题.在编程中,通常比较两个字符串是否相同的表达式是"==",但在java中不能这么写.在java中,用的是equals(); 例:A字符串和B和字符串比较: if(A.equals(B)){ } 返回true 或false. String 的equals 方法用于比较两个字符串是否相等.由于字符串是对象类型,所以不能用简单的"=="判断.而使用equals比较两个对象的内容是否

golang中判断两个slice是否相等

在golang中我们可以轻松地通过==来判断两个数组(array)是否相等,但遗憾的是slice并没有相关的运算符,当需要判断两个slice是否相等时我们只能另寻捷径了. slice相等的定义 我们选择最常见的需求,也就是当两个slice的类型和长度相同,且相等下标的值也是相等的,比如: a := []int{1, 2, 3} b := []int{1, 2, 3} c := []int{1, 2} d := []int{1, 3, 2} 上述代码中a和b是相等的,c因为长度和a不同所以不相等,

Java中判断两个时间是否相隔一天

/**      * 判断两个时间是否相隔一天      */     public static boolean overOneDay(String date1,String date2){         Date startTime =stringToDate(date1);         Date endTime =stringToDate(date2);         long  between = endTime.getTime() - startTime.getTime();

iOS中防止两个按钮同时点击的方法

在iOS开发中通常会遇到,两个靠的很近的按钮,一不小心两个按钮同时点击了. 神奇的bug就产生了,如果两个按钮事件都是跳转页面的话,就会出现连跳两个页面的情况. 通常解决此问题的方法是:定义一个BaseViewController. 设置一个方法setExclusiveTouchForButtons:(UIView *)myView -(void)setExclusiveTouchForButtons:(UIView *)myView { for (UIView * v in [myView s