Objective-C中一条线与一条点之间的距离?

时间:2010-06-01 10:25:07

标签: objective-c

我有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...

2 个答案:

答案 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 ......”你确定吗?绘制这条线和点,你会发现它们根本没有接近,公式给出了正确的结果。对于此类测试,请使用您可以自行验证的数据集。尝试用标尺在纸上测量的明显值。