黑马程序员技术交流社区
标题:
学习OC视频时的一道作业题
[打印本页]
作者:
流风124
时间:
2015-4-6 22:02
标题:
学习OC视频时的一道作业题
今天学习OC视频时遇到的一道题,感觉挺好的,对于面向对象的理解很有帮助,跟大家分享一下
6.设计一个类Circle,用来表示二维平面中的圆
1> 属性
* double _radius (半径)
* Point2D *_point (圆心)
2> 方法
* 属性相应的set和get方法
* 设计一个对象判断跟其他圆是否重叠(重叠返回YES,否则返回NO)
* 设计一个类方法判断两个圆是否重叠(重叠返回YES,否则返回NO)
下面是我自己练习的代码
#import <Foundation/Foundation.h>
#import <math.h>
//计算距离之差函数
double Delta(double d1,double d2)
{
return d1 - d2;
}
// 类:点的声明
@interface Point2D : NSObject
{
// 点的二维坐标
double _x;
double _y;
}
// x坐标的set方法声明
- (void)setX:(double)x;
// x坐标的get方法声明
- (double)x;
// y坐标的set方法声明
- (void)setY:(double)y;
// y坐标的get方法声明
- (double)y;
//计算跟其他点的距离
- (double)distanceWithOther:(Point2D *)otherpoint;
//计算两个点之间的距离
+ (double)distanceBetweenPoint1:(Point2D *)p1 AndPoint2:(Point2D *)p2;
@end
// 类:点的实现
@implementation Point2D
// x坐标的set方法实现
- (void)setX:(double)x
{
_x = x;
}
// x坐标的get方法实现
- (double)x
{
return _x;
}
// y坐标的set方法实现
- (void)setY:(double)y
{
_y = y;
}
// y坐标的get方法实现
- (double)y
{
return _y;
}
//计算跟其他点的距离
- (double)distanceWithOther:(Point2D *)otherpoint
{
return [Point2D distanceBetweenPoint1:self AndPoint2:otherpoint];
}
//计算两个点之间的距离
+ (double)distanceBetweenPoint1:(Point2D *)p1 AndPoint2:(Point2D *)p2
{
double delta_x = Delta([p1 x],[p2 x]);
double delta_y = Delta([p1 y],[p2 y]);
double d = sqrt( pow(delta_x,2) + pow(delta_y,2) );
return d;
}
@end
// 类:圆的声明
@interface Circle : NSObject
{
double _radius; // 半径
Point2D *_point; // 圆心
}
// 半径的set方法声明
- (void)setRadius:(double)radius;
// 半径的get方法声明
- (double)radius;
// 圆心的set方法声明
- (void)setPoint2DX:(double)x AndY:(double)y;
// 圆心的get方法声明
- (Point2D *)point;
//对象方法:判断跟其他圆是否重叠(重叠返回YES,否则返回NO)
- (BOOL)overlapWithOtherCircle:(Circle *)otherCircle;
//类方法判断两个圆是否重叠(重叠返回YES,否则返回NO)
+ (BOOL)overlapCircle1:(Circle *)c1 WithCircle2:(Circle *)c2;
@end
// 类:圆的实现
@implementation Circle
// 半径的set方法实现
- (void)setRadius:(double)radius
{
_radius = radius;
}
// 半径的get方法实现
- (double)radius
{
return _radius;
}
// 圆心的set方法实现
- (void)setPoint2DX:(double)x AndY:(double)y
{
Point2D *p = [Point2D new];
_point = p;
[_point setX:x];
[_point setY:y];
}
// 圆心的get方法实现
- (Point2D *)point
{
[_point x];
[_point y];
return _point;
}
//对象方法:判断跟其他圆是否重叠(重叠返回YES,否则返回NO)
- (BOOL)overlapWithOtherCircle:(Circle *)otherCircle
{
return [Circle overlapCircle1:self WithCircle2:otherCircle];
}
//类方法判断两个圆是否重叠(重叠返回YES,否则返回NO)
+ (BOOL)overlapCircle1:(Circle *)c1 WithCircle2:(Circle *)c2
{
double sumRadiusDistance = [c1 radius] + [c2 radius];//半径之和
double deltaCenterDistance = [[c1 point] distanceWithOther:[c2 point]];//圆心之间的距离
if (deltaCenterDistance >= 0 && deltaCenterDistance < sumRadiusDistance)
{
return YES;
}
return NO;
}
@end
int main()
{
Circle *circle1 = [Circle new];
[circle1 setRadius:1];
[circle1 setPoint2DX:0 AndY:0];
Circle *circle2 = [Circle new];
[circle2 setRadius:1];
[circle2 setPoint2DX:1.9 AndY:0];
if ([circle1 overlapWithOtherCircle:circle2] == YES)
{
NSLog(@"两圆重叠");
}else
{
NSLog(@"不重叠");
}
return 0;
}
复制代码
作者:
弥风冻雪
时间:
2015-4-6 22:04
厉害!代码写的很工整,格式也很好!
作者:
流风124
时间:
2015-4-7 12:48
弥风冻雪 发表于 2015-4-6 22:04
厉害!代码写的很工整,格式也很好!
谢谢,完全是按照老师的要求来的,希望能从现在开始就养成良好的编程习惯啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2