在初步学习OC之后迎来了一道 难度较高的题目,计算两个圆是否相交。
这道题和之前那些编程改错啥的一比真的难度上升很多(对我来说),要先设置Point2D类 然后 再设置Circle类 组合圆心类
说实话这题在没看MJ老师点评之前 自己没法独立完成 我只做到了 程序无错误但是 运行结果就是0 那些参数也都是0也不知道哪错了。只好看了点评的视频才知道是那些对象没创建里面都是空 你就往里面赋值赋不进去啊!貌似是经典错误。。。
然后MJ老师在后面讲到了Xcode 的高级功能 立马把文件转了高级功能 真的比以前CC -C啥的犀利多了。
这是我做的代码 可以运行但是可能有些地方格式或用法不完善还请大神指正
--------------------------------------------------
Point2D.h 圆心类声明
// Point2D.h
// 11-计算圆是否相交
//
// Created by 董 尚先 on 14-9-30.
// Copyright (c) 2014年 dsx. All rights reserved.
//
/*
5.设计一个类Point2D,用来表示二维平面中某个点
1> 属性
* double x
* double y
2> 方法
* 属性相应的set和get方法
* 设计一个对象方法同时设置x和y
* 设计一个对象方法计算跟其他点的距离
* 设计一个类方法计算两个点之间的距离
3> 提示
* C语言的math.h中有个函数:double pow(double n, double m);计算n的m次方
* C语言的math.h中有个函数:double sqrt(double n);计算根号n的值(对n进行开根)
*/
#import <Foundation/Foundation.h>
@interface Point2D :NSObject
{
// 成员变量
double _x;
double _y;
}
//x和y的setter and getter
- (void)setX:(double)x;
- (double)x;
- (void)setY:(double)y;
- (double)y;
- (void)YQsetX:(double)x andY:(double)y;// 同时设置x和y
- (double)DeltaDistanceWithOther:(Point2D *)other;// 对象方法计算两点距离
+ (double)DeltaDistancePoint1:(Point2D *)p1 andPoint2:(Point2D *)p2;// 类方法计算两点距离
@end
//
// Point2D.m
// 11-计算圆是否相交
//
// Created by 董 尚先 on 14-9-30.
// Copyright (c) 2014年 dsx. All rights reserved.
//
#import "Point2D.h"
#import <math.h>
@implementation Point2D
- (void)setX:(double)x
{
_x = x;
}
- (double)x;
{
return _x;
}
- (void)setY:(double)y
{
_y = y;
}
- (double)y;
{
return _y;
}
// 同时设置x和y
- (void)YQsetX:(double)x andY:(double)y
{
[selfsetX:x];
[selfsetY:y];
}
// 对象方法计算两点距离
- (double)DeltaDistanceWithOther:(Point2D *)other
{
// 算x和y的差值
double xDelta = [selfx] - [other x];
double yDelta = [selfy] - [other y];
//算出两个差值的平方
double xDeltaPF = pow(xDelta,2);
double yDeltaPF = pow(yDelta,2);
//返回平方和的开根结果
double c = sqrt(xDeltaPF + yDeltaPF);
return c;
}
// 类方法计算两点距离
+ (double)DeltaDistancePoint1:(Point2D *)p1 andPoint2:(Point2D *)p2
{
return [p1DeltaDistanceWithOther:p2]; //调用对象方法解决问题
}
@end
//
// Circle.h
// 11-计算圆是否相交
//
// Created by 董 尚先 on 14-9-30.
// Copyright (c) 2014年 dsx. All rights reserved.
//
/*
6.设计一个类Circle,用来表示二维平面中的圆
1> 属性
* double _radius (半径)
* Point2D *_point (圆心)
2> 方法
* 属性相应的set和get方法
* 设计一个对象判断跟其他圆是否重叠(重叠返回YES,否则返回NO)
* 设计一个类方法判断两个圆是否重叠(重叠返回YES,否则返回NO)
*/
#import <Foundation/Foundation.h>
#import "Point2D.h"
@interface Circle :NSObject
{
// 成员变量
double _radius;
Point2D * _Point;
}
// 半径和圆心的get和set算法声明
- (void)setRadius:(double)radius;
- (double)radius;
- (void)setPoint:(Point2D *)point;
- (Point2D *)point;
// 对象方法判断该对象和另一个圆是否相交
- (BOOL)isFixWithOtherCircle:(Circle *)other;
// 类方法判断两个圆是否相交
+ (BOOL)isFixWithOtherCircle:(Circle *)c1 andCircle:(Circle *)c2;
@end
//
// Circle.m
// 11-计算圆是否相交
//
// Created by 董 尚先 on 14-9-30.
// Copyright (c) 2014年 dsx. All rights reserved.
//
/*
6.设计一个类Circle,用来表示二维平面中的圆
1> 属性
* double _radius (半径)
* Point2D *_point (圆心)
2> 方法
* 属性相应的set和get方法
* 设计一个对象判断跟其他圆是否重叠(重叠返回YES,否则返回NO)
* 设计一个类方法判断两个圆是否重叠(重叠返回YES,否则返回NO)
*/
#import "Circle.h"
#import "Point2D.h"
#import <math.h>
@implementation Circle
// 半径和圆心的get和set算法实现
- (void)setRadius:(double)radius
{
_radius = radius;
}
- (double)radius
{
return_radius;
}
- (void)setPoint:(Point2D *)point
{
_Point = point;
}
- (Point2D *)point
{
return _Point;
}
// 对象方法判断该对象和另一个圆是否相交
- (BOOL)isFixWithOtherCircle:(Circle *)other
{
//return [Circle isFixWithOtherCircle:self andCircle:other];
//给两个圆选好圆心
Point2D *point1 = [selfpoint];
Point2D *point2 = [other point];
// 算出圆心距
double DeltaPoint = [point1 DeltaDistanceWithOther:point2];
// 算出半径之和
double RadiusSum = self -> _radius + other -> _radius;
return DeltaPoint < RadiusSum; // 半径和大于圆心距就是反回相交
}
// 类方法判断两个圆是否相交
+ (BOOL)isFixWithOtherCircle:(Circle *)c1 andCircle:(Circle *)c2
{
/*
Point2D *point1 = [c1 point];
Point2D *point2 = [c2 point];
double DeltaPoint = [point1 DeltaDistanceWithOther:point2];
double RadiusSum = c1->_radius + c2->_radius;
return DeltaPoint < RadiusSum ;
*/
return [c1isFixWithOtherCircle:c2]; //直接调用类方法解决
}
@end
//
// main.m
// 11-计算圆是否相交
//
// Created by 董 尚先 on 14-9-30.
// Copyright (c) 2014年 dsx. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Circle.h"
#import "Point2D.h"
int main()
{
// 建立两个圆对象
Circle *Cir1 = [Circlenew];
Circle *Cir2 = [Circlenew];
//用set算法把两个圆的半径设置成2
[Cir1setRadius:2];
[Cir2setRadius:2];
// 建立两个圆心对象
Point2D *p1 = [Point2Dnew];
Point2D *p2 = [Point2Dnew];
// 把两个圆的圆心设置成p1和p2
[Cir1setPoint:p1];
[Cir2setPoint:p2];
//通过一起赋值的算法把两个圆心数据都赋值进去
[p1YQsetX:15 andY:20];
[p2YQsetX:16 andY:19];
// 判断是否相交
BOOL bb = [CircleisFixWithOtherCircle:Cir1 andCircle:Cir2];
NSLog(@"到底是否相交 %d",bb);
}
//
// Point2D.h
// 12-精简的计算圆是否相交
//
// Created by 董 尚先 on 14-10-3.
// Copyright (c) 2014年 dsx. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Point2D :NSObject
// 用property算法直接生成x和y的get和set算法的声明和实现
@property double x;
@property double y;
// 一起给x和y赋值方法
- (void)YQsetX:(double)x andY:(double)y;
// 对象方法计算该对象和另一个圆心的距离
- (double)DeltaDistanceWithOther:(Point2D *)other;
// 类方法计算两个圆心的距离
+ (double)DeltaDistancePoint1:(Point2D *)p1 andPoint2:(Point2D *)p2;
@end
//
// Point2D.m
// 12-精简的计算圆是否相交
//
// Created by 董 尚先 on 14-10-3.
// Copyright (c) 2014年 dsx. All rights reserved.
//
#import "Point2D.h"
#import <math.h>
@implementation Point2D
// 一起给x和y赋值
- (void)YQsetX:(double)x andY:(double)y
{
self.x = x;
self.y = y;
}
// 对象方法计算该对象和另一个圆心的距离
- (double)DeltaDistanceWithOther:(Point2D *)other
{
// 计算x和y的差值
double DeltaX = self.x - other.x;
double DeltaY = self.y - other.y;
//算出两个差值的平方
double DeltaXPF = pow(DeltaX,2);
double DeltaYPF = pow(DeltaY,2);
//返回平方和的开根结果
return sqrt(DeltaXPF + DeltaYPF);
}
// 类方法计算两个圆心的距离
+ (double)DeltaDistancePoint1:(Point2D *)p1 andPoint2:(Point2D *)p2
{
return [p1DeltaDistanceWithOther:p2]; //调用对象方法解决问题
}
@end
//
// Circle.h
// 12-精简的计算圆是否相交
//
// Created by 董 尚先 on 14-10-3.
// Copyright (c) 2014年 dsx. All rights reserved.
//
#import "Point2D.h"
@interface Circle :NSObject
// 用property算法直接生成radius和point的get和set算法的声明和实现
@property double radius;// 定义半径
@propertyPoint2D *point; //组合圆心那个类
//对象方法判断该对象和另一个圆是否相交
- (BOOL)isFixWithOther:(Circle *)other;
//类方法判断两个圆是否相交
+ (BOOL)isFixCircle1:(Circle *)c1 andCircle2:(Circle *)c2;
@end
//
// Circle.m
// 12-精简的计算圆是否相交
//
// Created by 董 尚先 on 14-10-3.
// Copyright (c) 2014年 dsx. All rights reserved.
//
#import "Circle.h"
#import <math.h>
@implementation Circle
// 对象方法判断该对象和另一个圆是否相交
- (BOOL)isFixWithOther:(Circle *)other
{
double TotalDistanceRadius = self.radius + other.radius;// 算出半径之和
double DeltaDistancePoint = [self.pointDeltaDistanceWithOther:other.point];// 圆心距
return TotalDistanceRadius > DeltaDistancePoint;// 半径和大于圆心距就是反回相交
}
//类方法判断两个圆是否相交
+ (BOOL)isFixCircle1:(Circle *)c1 andCircle2:(Circle *)c2;
{
return [c1 isFixWithOther:c2];// 直接调用类方法解决
}
@end
//
// main.m
// 12-精简的计算圆是否相交
//
// Created by 董 尚先 on 14-10-3.
// Copyright (c) 2014年 dsx. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Point2D.h"
#import "Circle.h"
int main()
{
// 建立两个圆对象
Circle *Cir1 = [Circlenew];
Circle *Cir2 = [Circlenew];
//用点语法替代set算法把两个圆的半径设置成2
Cir1.radius =2;
Cir2.radius =2;
//建立两个圆心对象
Point2D *p1 = [Point2Dnew];
Point2D *p2 = [Point2Dnew];
// 把两个圆的圆心设置成p1和p2
[Cir1setPoint:p1];
[Cir2setPoint:p2];
//通过一起赋值的算法把两个圆心数据都赋值进去
[p1YQsetX:17 andY:20];
[p2YQsetX:16 andY:19];
// 判断是否相交
BOOL bb = [CircleisFixCircle1:Cir1 andCircle2:Cir2];
NSLog(@"到底是否相交 %d",bb);
return 0;
}