Я пытаюсь нарисовать кривую стрелки, используя слова Фибоначчи. Я могу использовать вызовы методов вместо строения на строку позже, но на данный момент я хочу сохранить строку.Рисование кривой стрелки со словами (Objective-c cocos2D)
// create string. Initially set to "A"
NSMutableString *s1 = [[NSMutableString alloc] init];
[s1 setString:@"A"];
// loop through and replace A and B with the following strings. Toned down iterations to 5 here
for(int i=0; i<5; ++i){
[s1 replaceOccurrencesOfString:@"A"
withString:@"+B-A-B+"
options:NSLiteralSearch
range:NSMakeRange(0, s1.length)];
[s1 replaceOccurrencesOfString:@"B"
withString:@"-A+B+A-"
options:NSLiteralSearch
range:NSMakeRange(0, s1.length)];
}
// set line color, thickness
ccDrawColor4F(0.8, 1.0, 0.76, 1.0);
glLineWidth(1.0f);
float angle = 0;
float travelDist = 1; // distance in pixels the line is drawn. Can be changed to whatever
CGPoint p = CGPointMake(300,100);
for(int i = 0; i < [s1 length]; i++){
if([[NSString stringWithFormat:@"%c",[s1 characterAtIndex:i]] isEqualToString:@"+"]){ // turn right
angle += 60;
}else if([[NSString stringWithFormat:@"%c",[s1 characterAtIndex:i]] isEqualToString:@"-"]){ // turn left
angle -= 60;
}else{ // any other character, draw line
float cosAngle = cosf(CC_DEGREES_TO_RADIANS(angle));
float newDist = travelDist * cosAngle;
float sinAngle = sinf(CC_DEGREES_TO_RADIANS(angle));
float newDist2 = travelDist *sinAngle;
ccDrawLine(ccp(p.x, p.y), ccp(p.x + newDist, p.y + newDist2));
p = CGPointMake(p.x + newDist, p.y + newDist2);
}
}
Я прочитал несколько сайтов о кривых стрелок и правила, которым они должны следовать. Похоже, я должен поступать правильно, но это не совсем правильно. Я получаю что-то, представляющее треугольник Серпинского, но не соответствующую кривую стрелки.
Вы можете не знать, Objective-C/Cocos2d, чтобы ответить на этот вопрос, так как я, вероятно, просто делать что-то логистический неправильное.