Я создаю несколько кругов со случайными позициями. то, что я хочу предотвратить, - это круги, перекрывающиеся друг с другом. поэтому я хочу сравнить вновь созданное значение CGPoint с теми, которые находятся в массиве, и заставить его генерировать новое значение, если значение находится в области радиуса одного из CGPoints.сравнить новое значение CGPoint с значением CGPoint в массиве
Я получил большую часть этого, за исключением перекрывающейся вещи. Я прокомментировал часть из того, что я пробовал, но на самом деле это не работает (ошибочная логика). Я не уверен, как перебирать отдельные значения CGPoint и сравнивать их.
UPDATE: Я изменить код немного больше и добавил проверку, чтобы увидеть, будет ли CGPoint перекрываться или нет. Проблема в том, когда я хочу попробовать что-то вроде
while (!xPointOk || !yPointOk) {
// generate new values
}
Я продолжаю падать в бесконечном цикле.
- (void) positionCircles
{
//generate random Y value within a range
int fromNumberY = 500;
int toNumberY = 950;
int randomNumberY =(arc4random()%(toNumberY-fromNumberY+1))+fromNumberY;
//generate random Y value within a range
int fromNumberX = 0;
int toNumberX = 700;
int randomNumberX = (arc4random()%(toNumberX-fromNumberX+1))+fromNumberX;
//array to hold all the the CGPoints
positionsArray = [[NSMutableArray alloc] init];
CGPoint circlePositionValue;
CGFloat radius = 70;
CGRect position = CGRectMake(randomNumberX,randomNumberY, radius, radius);
[self makeColors];
// create a circle for each color in color array
for (int i = 0; i < [colors count];i++)
{
// generate new position before placing new cirlce
randomNumberX = (arc4random()%(toNumberX-fromNumberX+1))+fromNumberX;
randomNumberY = (arc4random()%(toNumberY-fromNumberY+1))+fromNumberY;
circlePositionValue = CGPointMake(position.origin.x, position.origin.y);
for (NSValue *value in positionsArray) {
BOOL xPointOk = (randomNumberX < value.CGPointValue.x - radius) ||
(randomNumberX > value.CGPointValue.x + radius);
BOOL yPointOk = (randomNumberY < value.CGPointValue.y - radius) ||
(randomNumberY > value.CGPointValue.y + radius);
NSLog(@"xPoint: %i - %f", randomNumberX , value.CGPointValue.x);
NSLog(@"xPoint ok? %@", [email protected]"yes":@"no");
NSLog(@"yPoint: %i - %f", randomNumberY , value.CGPointValue.y);
NSLog(@"yPoint ok? %@", [email protected]"yes":@"no");
NSLog(@"___");
}
position.origin.x = randomNumberX;
position.origin.y = randomNumberY;
[positionsArray addObject:[NSValue valueWithCGPoint:circlePositionValue]];
Circle *myCircle = [[Circle alloc] initWithFrame:position radius:radius color:[colors objectAtIndex:i]];
myCircle.label.text = [NSString stringWithFormat:@"%i", i];
[self.view addSubview:myCircle];
}
}
привет, я попытался включить ваш код в мой. но я, похоже, не работал. Хотя я понимаю, что ваш путь определенно более эффективен. я смогу заставить его работать без использования триггера? –
Это псевдокод. Не просто копировать/вставлять. Адаптируйте то, что вы видите там, в свою программу. И нет, вам нужно будет использовать базовую тригонометрию для решения этой проблемы. –
Да, теперь я работаю. благодаря! хотя мне нужно изучить некоторые основные тригг :) –