नहीं है:
बाद में:
Find the tangent of a point on a cubic bezier curve (on an iPhone)
से और बस कॉपी और पेस्ट कोड: के लिए एक पूरा, सरल, समाधान नीचे मीकल के जवाब पर आधारित है, के लिए क्लिक करें पदों की गणना के पीछे सरल गणित, आप विकिपीडिया पर भी बेज़ीर घटता पर चर्चा करने वाले प्रत्येक पेपर में इसके बारे में पढ़ सकते हैं। वैसे भी, मैं उन सभी से संबंधित हो सकता हूं जो वास्तव में कोड में इसे लागू करने में परेशानी में हैं, इसलिए मैंने इस नमूना को UIView लिखा क्योंकि यह संभवतः आपको प्रारंभ करने का सबसे आसान तरीका है।
#import "MBBezierView.h"
CGFloat bezierInterpolation(CGFloat t, CGFloat a, CGFloat b, CGFloat c, CGFloat d) {
CGFloat t2 = t * t;
CGFloat t3 = t2 * t;
return a + (-a * 3 + t * (3 * a - a * t)) * t
+ (3 * b + t * (-6 * b + b * 3 * t)) * t
+ (c * 3 - c * 3 * t) * t2
+ d * t3;
}
@implementation MBBezierView
- (void)drawRect:(CGRect)rect {
CGPoint p1, p2, p3, p4;
p1 = CGPointMake(30, rect.size.height * 0.33);
p2 = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
p3 = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));
p4 = CGPointMake(-30 + CGRectGetMaxX(rect), rect.size.height * 0.66);
[[UIColor blackColor] set];
[[UIBezierPath bezierPathWithRect:rect] fill];
[[UIColor redColor] setStroke];
UIBezierPath *bezierPath = [[[UIBezierPath alloc] init] autorelease];
[bezierPath moveToPoint:p1];
[bezierPath addCurveToPoint:p4 controlPoint1:p2 controlPoint2:p3];
[bezierPath stroke];
[[UIColor brownColor] setStroke];
for (CGFloat t = 0.0; t <= 1.00001; t += 0.05) {
CGPoint point = CGPointMake(bezierInterpolation(t, p1.x, p2.x, p3.x, p4.x), bezierInterpolation(t, p1.y, p2.y, p3.y, p4.y));
UIBezierPath *pointPath = [UIBezierPath bezierPathWithArcCenter:point radius:5 startAngle:0 endAngle:2*M_PI clockwise:YES];
[pointPath stroke];
}
}
@end
यह मैं क्या मिलता है:
गणित मजेदार है! +1! – slf
@ जो ब्लो: क्या यह वास्तव में आप चाहते थे? आपने कहा था कि आप एक बिंदु चाहते थे जो वक्र के साथ दूरी डी है। Michal, अगर मैं गलत हूँ, तो मुझे सही करें, लेकिन आपका कोड सिर्फ विभिन्न पैरामीटर मानों पर वक्र का मूल्यांकन करता है, जो लंबाई के समान नहीं है। जैसा कि आप देख सकते हैं, अंक चोटी में एक साथ और वक्र के बीच में अलग हैं। – CromTheDestroyer
हाय क्रॉम - आप काफी सही हैं, वे केवल वक्र के साथ समान रूप से दूरी पर हैं।स्पष्ट रूप से सटीक spacings प्राप्त करने के लिए गणितीय रूप से कोई आसान तरीका नहीं है। यह सामान्य अनुमान गेम इंजन और इसी तरह के लिए ठीक काम करता है। यह भी देखें 4089443. – Fattie