Расстояние между линией и точкой в ​​Objective-C? - PullRequest
1 голос
/ 01 июня 2010

у меня 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);
}

Формула кажется правильной (основываясь на википедии), но результаты неверны ... почему?
Спасибо!

Edit:

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 ]

1 голос
/ 01 июня 2010

Я получаю, с независимой реализацией, что два теста должны дать (до приведения к 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));

показывает, что кишки метода верны.

Правильны ли ваши инициализаторы?

0 голосов
/ 01 июня 2010

формула верна, но ваш чек - нет. "дай 24, должно быть ~ 0 ..." ты уверен? нарисуйте эту линию и точку, и вы увидите, что они совсем не близки и формула дает правильный результат. Для таких тестов используйте набор данных, который вы можете проверить самостоятельно. попробуйте очевидные значения, которые вы можете измерить линейкой на листе бумаги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...