IOS学习--课后练习6

/*
 6.设计一个类Circle,用来表示二维平面中的圆
 1> 属性
 * double _radius (半径)
 * Point2D *_point (圆心)
 
 2> 方法
 * 属性相应的set和get方法
 * 设计一个对象判断跟其他圆是否重叠(重叠返回YES,否则返回NO)
 * 设计一个类方法判断两个圆是否重叠(重叠返回YES,否则返回NO)
 */


#import<Foundation/Foundation.h>


@interface Point2D : NSObject
{
    //横坐标
    double _x;
    //纵坐标
    double _y;
}


//横纵坐标的get和set方法
- (void)setX:(double)newX;


- (double)x;


- (void)setY:(double)newY;


- (double)y;


//同时设置x y
- (void)setXYWithX:(double)x andY:(double)y;


//计算跟其他点之间的距离
- (double)calDistanceWithPoint:(Point2D*)p1;


//计算两个点之间的距离
+ (double)calDistanceWithPoint1:(Point2D*)p1 andPoint2:(Point2D*)p2;


@end




@implementation Point2D


//横纵坐标的get和set方法
- (void)setX:(double)newX
{
    _x = newX;
}


- (double)x
{
    return _x;
}


- (void)setY:(double)newY
{
    _y = newY;
}


- (double)y
{
    return _y;
}


//同时设置x y
- (void)setXYWithX:(double)newX andY:(double)newY
{
    _x = newX;
    _y = newY;
}


//计算跟其他点之间的距离
- (double)calDistanceWithPoint:(Point2D*)p1;
{
    //方法一、
    double xDistance,yDistace,distace;
    xDistance = pow((_x -[p1 x]),2);
    yDistace = pow((_y - [p1 y]),2);
    distace = sqrt(xDistance+yDistace);
    
    //方法二
    int distace2 = [Point2D calDistanceWithPoint1:self andPoint2:p1];
    
    //return distace2;
    return distace;
    
}


//计算两个点之间的距离
+ (double)calDistanceWithPoint1:(Point2D*)p1 andPoint2:(Point2D*)p2
{
    double xDistance,yDistace,distace;
    xDistance = pow(([p1 x] - [p2 x]),2);
    yDistace = pow(([p1 y] - [p2 y]),2);
    distace = sqrt(xDistance+yDistace);
    
    return distace;
    
    
}
@end


@interface Circle : NSObject
{
    //半径
    double _radius;
    //圆心
    Point2D *_point;
}


//半径的set和get操作
- (void)setRadius:(double)newRadius;


- (double)radius;


//圆心的set get操作
- (void)setPoint:(Point2D*)point;


- (Point2D*)point;


//计算两个元是否重叠
- (double)fadeOrNot:(Circle*)p1;


+ (double)fadeOrNotWithCircle1:(Circle*)p1 andCircle2:(Circle*)p2;


@end


@implementation Circle


//半径的set和get操作
- (void)setRadius:(double)newRadius
{
    _radius = newRadius;
}


- (double)radius
{
    return _radius;
}


//圆心的set get操作
- (void)setPoint:(Point2D*)point
{
    _point = point;
}


- (Point2D*)point
{
    return _point;
}


//计算两个元是否重叠
- (double)fadeOrNot:(Circle*)c1
{


    
    //方法二
    double length3 = [Circle fadeOrNotWithCircle1:self andCircle2:c1];
    return length3;
}


+ (double)fadeOrNotWithCircle1:(Circle*)c1 andCircle2:(Circle*)c2
{
    //方法一
    double length = [[c1 point] calDistanceWithPoint:[c2 point]];
    
    //圆心间的距离
    NSLog(@"圆心间的距离为%f",length);
    
    double len = [c1 radius] + [c2 radius];
    
    //半径之和为
    NSLog(@"半径之和为:%f",len);
    
    return length - len;
}


@end


int main()
{
    Point2D *p = [Point2D new];
    //设置一个点
    [p setXYWithX:2 andY:0];
    
    Circle *c = [Circle new];
    //设置半径
    [c setRadius:1];
    //设置圆心
    [c setPoint:p];
    
    
    Point2D *p1 = [Point2D new];
    //设置一个点
    [p1 setXYWithX:5 andY:0];
    
    Circle *c1 = [Circle new];
    //设置半径
    [c1 setRadius:1];
    //设置圆心
    [c1 setPoint:p1];
    
    double length = [c fadeOrNot:c1];
    
    NSLog(@"%f",length);
    
    length>0?NSLog(@"无重叠区域"):NSLog(@"有重叠区域");
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验内容: 一、定义一个名为Circle,位于shape包中。要求如下: (1) 该需要描述二维坐标系中的位置,心的横、纵坐标值均取整数;描述的半径,取双精度型。 (2) 无参构造方法将心坐标设为坐标点,半径设为1.0;有参构造方法需要根据参数值设置心坐标和半径值。 (3) 提供一个计算面积的方法double getArea()。 (4) 提供一个判断当前对象与参数对象是否相交的方法(相交方式见下图): boolean isIntersected(Circle another) (5) 提供一个判断当前对象是否包含参数对象的方法(包含方式见下图): boolean contains(Circle another) (6) 提供一个判断当前对象与参数对象的大小关系的方法(判断依据是半径,半径之差的绝对值小于0.0001认为相等;返回负数表示当前对象小,0表示相等,正数表示当前对象) int compareTo(Circle another) (7) 提供返回当前的字符串的方法,格式为:[Circle(x,y)-raduis] String toString() 二、定义一个包含main方法的TestCircle,位于shape包中。要求如下: (1) main方法中调用以下方法。 (2) 编写静态方法createArray,生成位置和大小均随机的10个对象,置于数组中。 (3) 编写静态方法sort对这10个对象进行升序排序,并输出。 (4) 编写静态方法computeArea计算这10个中互不相交和包含的的面积之和。 提交要求:打包为可以执行的JAR文档,其中要包含源程序文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值