黑马程序员技术交流社区
标题:
判断两个圆是否相交!
[打印本页]
作者:
诺微_
时间:
2014-12-20 23:35
标题:
判断两个圆是否相交!
/*
要求:设计一个类Circle,用来表示二维平面中的圆
1> 属性
* double _radius (半径)
* Point2D *_point (圆心)
2> 方法
* 属性相应的set和get方法
* 设计一个对象方法判断跟其他圆是否重叠(重叠返回YES,否则返回NO)
* 设计一个类方法判断两个圆是否重叠(重叠返回YES,否则返回NO)
*/
#import <Foundation/Foundation.h>
#import <math.h>
@interface Point2D : NSObject
{
double _x;
double _y;
}
// x值的setter和getter的声明
- (void)setX:(double)x;
- (double)x;
// y值的setter和getter的声明
- (void)setY:(double)y;
- (double)y;
// 1.对象方法:计算跟其他点的距离的声明
- (double)distanceOfOther:(Point2D *)other;
// 2.类方法:计算两个点间的距离的声明
+ (double)distanceWithP1:(Point2D *)p1 andP2:(Point2D *)p2;
@end
@implementation Point2D
// x值的setter和getter的实现
- (void)setX:(double)x
{
_x = x;
}
- (double)x
{
return _x;
}
// y值的setter和getter的实现
- (void)setY:(double)y
{
_y = y;
}
- (double)y
{
return _y;
}
// 1.对象方法:计算跟其他点的距离的实现
- (double)distanceOfOther:(Point2D *)other
{
double xPingFang = pow(([self x] - [other x]), 2.0); // x差值的平方
double yPingFang = pow(([self y] - [other y]), 2.0); // y差值的平方
return sqrt(xPingFang + yPingFang); // x差值的平方 + y差值的平方 再开方
}
// 2.类方法:计算两个点间的距离的实现
+ (double)distanceWithP1:(Point2D *)p1 andP2:(Point2D *)p2
{
return [p1 distanceOfOther:p2];
}
@end
@interface Circle : NSObject
{
double _radius; // (半径)
Point2D *_point; //(圆心)
}
// 半径的setter和getter的声明
- (void)setRadius:(double)radius;
- (double)radius;
// 圆心的setter和getter的声明
- (void)setPoint:(Point2D *)point;
- (Point2D *)point;
/*
返回值是BOOL类型的,方法名一般以is开头
*/
// 对象方法判断跟其他圆是否重叠(重叠返回YES,否则返回NO)
- (BOOL)isInteractOfOther:(Circle *)other;
// 类方法判断跟其他圆是否重叠(重叠返回YES,否则返回NO)
+ (BOOL)isInteractCircle1:(Circle *)circle1 WithCircle2:(Circle *)circle2;
@end
@implementation Circle
// 半径的setter和getter的实现
- (void)setRadius:(double)radius
{
_radius = radius;
}
- (double)radius
{
return _radius;
}
// 圆心的setter和getter的实现
- (void)setPoint:(Point2D *)point
{
_point = point;
}
- (Point2D *)point
{
return _point;
}
// 对象方法判断跟其他圆是否重叠(重叠返回YES,否则返回NO)
- (BOOL)isInteractOfOther:(Circle *)other
{
return [Point2D distanceWithP1:[self point] andP2:[other point]] < [self radius] + [other radius];
}
// 类方法判断跟其他圆是否重叠(重叠返回YES,否则返回NO)
+ (BOOL)isInteractCircle1:(Circle *)circle1 WithCircle2:(Circle *)circle2
{
return [circle1 isInteractOfOther:circle2];
}
@end
int main()
{
Circle *c1 = [Circle new];
[c1 setRadius:1]; // 1.调用圆的setRadius方法设置半径
Point2D *p1 = [Point2D new]; // 先创建一个点对象
[p1 setX:10];
[p1 setY:15];
[c1 setPoint:p1]; // 2.调用圆的setPoint方法设置圆心(点对象),注意设置圆心(点对象)时,必须的先新建一个点对象,再调用圆的setPoint方法将已经建好的点对象赋值进去
Circle *c2 = [Circle new];
[c2 setRadius:3];
Point2D *p2 = [Point2D new];
[p2 setX:13];
[p2 setY:19];
[c2 setPoint:p2];
BOOL b1 = [c1 isInteractOfOther:c2];
NSLog(@"%d", b1);
return 0;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2