我有2个课程:
// point : (x, y)
@interface ICPoint : NSObject {
NSInteger x;
NSInteger y;
}
// line : y= ax + b
@interface ICLine : NSObject {
float a;
float b;
}
和这个方法:
// return the distance between a line and a point
-(NSInteger) distance:(ICPoint *)point {
return fabs(-a*point.x +point.y - b) / sqrt(a*a + 1);
}
公式似乎是正确的(基于维基百科),但结果是错误的......为什么? 谢谢!
编辑:
ICLine *line1 = [[ICLine alloc] initWithA:0.60 andB:11.25];
ICLine *line2 = [[ICLine alloc] initWithA:0.61 andB:-2.85];
ICPoint *point = [[ICPoint alloc] initWithX:41 andY:22];
[line1 distance:point]; // give 11, it's ok.
[line2 distance:point]; // give 24, it should be ~0...
答案 0 :(得分:1)
我得到一个独立的实现,两个测试应该产生(在转换为NSInteger之前)~11.87和~0.17。因此,该方法应该返回11和0,正如提问者所说。
NSInteger x, y;
float a, b;
x = 41; y = 22;
a = 0.61f; b = -2.85f;
NSLog(@"result ", fabs(-a*x + y - b) / sqrt(a * a + 1));
表明该方法的内容是正确的。
您的初始化程序是否正确?
答案 1 :(得分:0)
公式是正确的,但您的检查不是。 “给24,它应该是〜0 ......”你确定吗?绘制这条线和点,你会发现它们根本没有接近,公式给出了正确的结果。对于此类测试,请使用您可以自行验证的数据集。尝试用标尺在纸上测量的明显值。