उद्धरण विकिपीडिया से: लिंक पोस्ट @millimoose देखें Superellipse
एन = 1/2 के लिए, विशेष रूप से, चार आर्क्स से प्रत्येक एक द्विघात Bézier वक्र द्वारा दो परिभाषित किया गया है कुल्हाड़ियों; नतीजतन, प्रत्येक चाप एक पैराबोला का एक खंड है।
तो बेजियर वक्र का उपयोग करके स्क्वायरकल का अनुमान लगाने का प्रयास क्यों न करें? दोनों घटता (बेजियर और स्क्वायरकल) पैरामीट्रिक समीकरणों द्वारा परिभाषित किए जाते हैं।addCurveToPoint:controlPoint1:controlPoint2:
रिसीवर के पथ के लिए एक घन Bézier वक्र जोड़ता:
UIBezierPath Class विधि है।
नोट: addQuadCurveToPoint:controlPoint:
विधि का उपयोग खराब परिणाम देता है - परीक्षण।
मैं इस विधि का इस्तेमाल किया और कहा कि क्या एक परिणाम के रूप हुआ:
red line
- गोलाकार आयत, blue line
- चौके से आयत बेज़ियर घटता
यदि यह परिणाम रुचि रखता है - ड्राइंग नीचे कोड ।
नोट: अधिक सटीक मिलान प्राप्त करने के लिए चार corner points
के निर्देशांक को बदलने के लिए बेजियर वक्र की आवश्यकता हो सकती है (अब वे आयताकार के कोण के अनुरूप हैं जिसमें आकृति अंकित है)।
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
//set rect size for draw
float rectSize = 275.;
CGRect rectangle = CGRectMake(CGRectGetMidX(rect) - rectSize/2, CGRectGetMidY(rect) - rectSize/2, rectSize, rectSize);
//Rounded rectangle
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
UIBezierPath* roundedPath = [UIBezierPath bezierPathWithRoundedRect:rectangle cornerRadius:rectSize/4.7];
[roundedPath stroke];
//Rectangle from Fours Bezier Curves
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
UIBezierPath *bezierCurvePath = [UIBezierPath bezierPath];
//set coner points
CGPoint topLPoint = CGPointMake(CGRectGetMinX(rectangle), CGRectGetMinY(rectangle));
CGPoint topRPoint = CGPointMake(CGRectGetMaxX(rectangle), CGRectGetMinY(rectangle));
CGPoint botLPoint = CGPointMake(CGRectGetMinX(rectangle), CGRectGetMaxY(rectangle));
CGPoint botRPoint = CGPointMake(CGRectGetMaxX(rectangle), CGRectGetMaxY(rectangle));
//set start-end points
CGPoint midRPoint = CGPointMake(CGRectGetMaxX(rectangle), CGRectGetMidY(rectangle));
CGPoint botMPoint = CGPointMake(CGRectGetMidX(rectangle), CGRectGetMaxY(rectangle));
CGPoint topMPoint = CGPointMake(CGRectGetMidX(rectangle), CGRectGetMinY(rectangle));
CGPoint midLPoint = CGPointMake(CGRectGetMinX(rectangle), CGRectGetMidY(rectangle));
//Four Bezier Curve
[bezierCurvePath moveToPoint:midLPoint];
[bezierCurvePath addCurveToPoint:topMPoint controlPoint1:topLPoint controlPoint2:topLPoint];
[bezierCurvePath moveToPoint:midLPoint];
[bezierCurvePath addCurveToPoint:botMPoint controlPoint1:botLPoint controlPoint2:botLPoint];
[bezierCurvePath moveToPoint:midRPoint];
[bezierCurvePath addCurveToPoint:topMPoint controlPoint1:topRPoint controlPoint2:topRPoint];
[bezierCurvePath moveToPoint:midRPoint];
[bezierCurvePath addCurveToPoint:botMPoint controlPoint1:botRPoint controlPoint2:botRPoint];
[bezierCurvePath stroke];
CGContextRestoreGState(context);
नहीं, मुझे पता है कि गोलाकार आयताकार कैसे बनाना है; मैं वास्तव में टाइप स्क्वायरल का सुपररेलीप्सिस हूं, क्योंकि वे आईओएस 7 पर स्प्रिंगबोर्ड आइकनों के लिए उपयोग करते हैं। –
@RemyVanherweghem 'bezierPathWithRoundedRect' विधि को आसान कोनों को आकर्षित करने के लिए आईओएस 7 में संशोधित किया गया था। इसके अलावा यह एक स्क्वायरल प्रतीत नहीं होता है: http://blog.mikeswanson.com/post/62341902567/unleashing- आनुवांशिक- एल्गोरिदम-on-the-ios-7-icon – millimoose
(उस ने कहा, 'UIBezierPath' विधियां आइकन टेम्पलेट के लिए एकदम सही मिलान न करें, वे पहले से कहीं अधिक करीब हैं।) – millimoose