Часть моих полигонов нарисована за пределами границ, и я не понимаю, почему.
Вот что я имею в виду:
Изображение 1 (восьмиугольник)
За исключением Квадрата и Шестиугольника, у остальных многоугольников есть части, которые вычерчены из границ.
Я распечатал координаты для некоторых из них, сгенерированных из метода (pointsForPolygonInRect), и это то, что я получил ...
Для 3-стороннего (треугольника):
"NSPoint: {139.99998, -16 }",
"NSPoint: {249.1192, 172.99998}",
"NSPoint: {30.880798, 173}"
Обратите внимание на y-значение "-16", я не понимаю, как метод (pointsForPolygonInRect) выдает отрицательные значения, алгоритм неправильный?
Я уверен, что скопировал и вставил исходный код, который был задан в задании № 3, непосредственно в мой класс PolygonView, не изменил его и все еще получил ту же ошибку.
Для 8-сторонних (восьмиугольник):
"NSPoint: {256.40881, 158.21811}",
"NSPoint: {188.21811, 226.40881 }",
"NSPoint: {91.781876, 226.40881 }",
"NSPoint: {23.591179, 158.21812}",
"NSPoint: {23.591179, 61.781887}",
"NSPoint: {91.781921,
-6,4088364 }»,
"NSPoint: {188.21814,
-6,4088135 * *} тысячи пятьдесят-одна»,
"NSPoint: {256.40884, 61.781944}"
Обратите внимание, что отрицательное значение также для восьмиугольника, также высота для моего класса PolygonView составляет всего 220, я не понимаю, как вывод метода 226.40881, из-за которого верхняя и нижняя линии выходят за границы.
Ниже приведен код drawRect и pointsForPolygonInRect (оба находятся в классе PolyView) ...
- (NSArray *)pointsForPolygonInRect:(CGRect)rect numberOfSides:(int)numberOfSides {
CGPoint center = CGPointMake(rect.size.width / 2.0, rect.size.height / 2.0);
float radius = 0.9 * center.x;
NSMutableArray *result = [NSMutableArray array];
float angle = (2.0 * M_PI) / numberOfSides;
float exteriorAngle = M_PI - angle;
float rotationDelta = angle - (0.5 * exteriorAngle);
for (int currentAngle = 0; currentAngle < numberOfSides; currentAngle++) {
float newAngle = (angle * currentAngle) - rotationDelta;
float curX = cos(newAngle) * radius;
float curY = sin(newAngle) * radius;
[result addObject:[NSValue valueWithCGPoint:CGPointMake(center.x + curX, center.y + curY)]];
}
return result;
}
- (void)drawRect:(CGRect)rect {
// Drawing code.
NSArray *arrayOfCoordinates = [self pointsForPolygonInRect:[self bounds] numberOfSides:[polygon numberOfSides]];
NSEnumerator *enumerator = [arrayOfCoordinates objectEnumerator];
CGContextRef ct = UIGraphicsGetCurrentContext();
NSLog(@"%@", arrayOfCoordinates); // for checking purposes
CGPoint firstCoordinatePoint = [[enumerator nextObject] CGPointValue];
CGContextBeginPath(ct);
CGContextMoveToPoint(ct, firstCoordinatePoint.x, firstCoordinatePoint.y);
CGPoint nextCoordinatePoint;
NSValue *coordinate;
while (coordinate = [enumerator nextObject]) {
nextCoordinatePoint = [coordinate CGPointValue];
CGContextAddLineToPoint(ct, nextCoordinatePoint.x, nextCoordinatePoint.y);
}
CGContextClosePath(ct);
[[UIColor clearColor] setFill];
[[UIColor blackColor] setStroke];
CGContextDrawPath(ct, kCGPathFillStroke);
}
Я очень ценю любую помощь. Спасибо!