我想蟒蛇算法(在這裏:Extending a line segment to fit into a bounding box)轉換到我的iPhone應用程序..但它只能當我startPoint.x>然後endPointx如何在一個矩形擬合線
是什麼在這裏改變? 我不明白它..
如果我畫一條從左上角到右下角的線,它的工作原理!但是,如果我從右上角畫一條線,則會失敗。因此,它只能在一個方向。我想我必須要改變一些變量如果從右到左
MIN爲(0,0)和MAX取決於設備,但對於iPhone的Retina(300568)
- (NSMutableArray *) extendAlgorithm:(CGPoint)start withEnd:(CGPoint)end withBorderMin:(CGPoint)min andBorderMax:(CGPoint)max {
int x1 = (int) start.x; int y1 = (int) start.y;
int x2 = (int) end.x; int y2 = (int) end.y;
int xmin = (int) min.x; int ymin = (int) min.y;
int xmax = (int) max.x; int ymax = (int) max.y;
if(y1 == y2) {
return [[NSMutableArray alloc] initWithObjects:
[NSNumber numberWithDouble:xmin],
[NSNumber numberWithDouble:y1],
[NSNumber numberWithDouble:xmax],
[NSNumber numberWithDouble:y1],
nil];
}
if(x1 == x2) {
return [[NSMutableArray alloc] initWithObjects:
[NSNumber numberWithDouble:x1],
[NSNumber numberWithDouble:ymin],
[NSNumber numberWithDouble:x1],
[NSNumber numberWithDouble:ymax],
nil];
}
double y_for_xmin = y1 + (y2 - y1) * (xmin - x1)/(x2 - x1);
double y_for_xmax = y1 + (y2 - y1) * (xmax - x1)/(x2 - x1);
double x_for_ymin = x1 + (x2 - x1) * (ymin - y1)/(y2 - y1);
double x_for_ymax = x1 + (x2 - x1) * (ymax - y1)/(y2 - y1);
if(ymin <= y_for_xmin <= ymax) {
if(xmin <= x_for_ymax <= xmax) {
return [[NSMutableArray alloc] initWithObjects:
[NSNumber numberWithDouble:xmin],
[NSNumber numberWithDouble:y_for_xmin],
[NSNumber numberWithDouble:x_for_ymax],
[NSNumber numberWithDouble:ymax],
nil];
}
if(xmin <= x_for_ymin <= xmax) {
return [[NSMutableArray alloc] initWithObjects:
[NSNumber numberWithDouble:xmin],
[NSNumber numberWithDouble:y_for_xmin],
[NSNumber numberWithDouble:x_for_ymin],
[NSNumber numberWithDouble:ymin],
nil];
}
}
if(ymin <= y_for_xmax <= ymax) {
if(xmin <= x_for_ymin <= xmax) {
return [[NSMutableArray alloc] initWithObjects:
[NSNumber numberWithDouble:x_for_ymin],
[NSNumber numberWithDouble:ymin],
[NSNumber numberWithDouble:xmax],
[NSNumber numberWithDouble:y_for_xmax],
nil];
}
if(xmin <= x_for_ymax <= xmax) {
return [[NSMutableArray alloc] initWithObjects:
[NSNumber numberWithDouble:x_for_ymax],
[NSNumber numberWithDouble:ymax],
[NSNumber numberWithDouble:xmax],
[NSNumber numberWithDouble:y_for_xmax],
nil];
}
}
return nil;
}
會不會是你很難用調試器到達那裏,或者在檢查這些值時是否有任何問題? – 2013-03-26 17:38:23
那麼讓我給你一個提示,你沒有足夠的條件來涵蓋所有的情況。 – 2013-03-26 18:05:56