मेरे पास एक ऐप है जो UIView
में एक बेजियर वक्र खींचता है और जब मैं समझता हूं कि एक्स को पहले से जोड़ता है तो मुझे एक्स अंतरण की आवश्यकता होती है, जैसा कि मैं समझता हूं, ऐसा कोई तरीका नहीं है UIBezierPath
का सीधे एक बिंदु खोजें लेकिन आप CGPath
के बिंदु का पता लगा सकते हैं।पथ पर एक बिंदु ढूंढना
सबसे पहले, अगर मैं अपने UIBezierPath
(जैसा कि मैंने अपने कोड में किया है) "स्ट्रोक" है, तो क्या यह वास्तव में एक CGPath बना रहा है या क्या मुझे इसे वास्तव में CGPath
में परिवर्तित करने के लिए और कदम उठाने की आवश्यकता है?
दूसरा, मैं वाई
के लिए मूल्य प्रदान करके घटता एक्स पर एक दूसरे को काटना लगाना चाहते हैंमेरे इरादे स्वचालित रूप से वाई के दिए गए मूल्य के लिए एक्स गणना करने के लिए उपयोगकर्ता स्लाइडर (जो वक्र चाल से चलता है के रूप में है क्रमशः बाएं या दाएं)।
मेरा प्रारंभिक प्रदर्शन।
जब मैं वर्तमान में स्लाइडर को क्या होता है।
मैं क्या चाहता हूँ मेरा प्रदर्शन भी की तरह लग रहे।
GraphView.h
#import <UIKit/UIKit.h>
@interface GraphView : UIView
{
float adjust;
int x;
int y;
}
- (IBAction)sliderChanged:(id)sender;
- (IBAction)yChanged:(id)sender;
@property (weak, nonatomic) IBOutlet UISlider *sliderValue;
@property (weak, nonatomic) IBOutlet UITextField *xValue;
@property (weak, nonatomic) IBOutlet UITextField *yValue;
@end
GraphView.m
#import "GraphView.h"
@interface GraphView()
@end
@implementation GraphView
@synthesize sliderValue, xValue, yValue;
- (id)initWithCoder:(NSCoder *)graphView
{
self = [super initWithCoder:graphView];
if (self) {
adjust = 194;
y = 100;
}
return self;
}
- (IBAction)sliderChanged:(id)sender
{
adjust = sliderValue.value;
// Calcualtion of the X Value and setting of xValue.text textField goes here
[self setNeedsDisplay];
}
- (IBAction)yChanged:(id)sender
{
y = yValue.text.intValue;
[self setNeedsDisplay];
[self resignFirstResponder];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
if(touch.phase == UITouchPhaseBegan) {
y = yValue.text.intValue;
[self setNeedsDisplay];
[yValue resignFirstResponder];
}
}
- (void)drawRect:(CGRect)rect
{
UIBezierPath *lines = [[UIBezierPath alloc] init];
[lines moveToPoint:CGPointMake(0, y)];
[lines addLineToPoint:CGPointMake(200, y)];
[lines addLineToPoint:CGPointMake(200, 280)];
[lines setLineWidth:1];
[[UIColor redColor] setStroke];
float dashPattern[] = {2, 2};
[lines setLineDash:dashPattern count:2 phase:0.0];
[lines stroke];
UIBezierPath *curve = [[UIBezierPath alloc] init];
[curve moveToPoint:CGPointMake(0, 280)];
[curve addCurveToPoint:CGPointMake(280, 0) controlPoint1:CGPointMake(adjust, 280) controlPoint2:CGPointMake(adjust, 0)];
[curve setLineWidth:2];
[[UIColor blueColor] setStroke];
[curve stroke];
}
@end
थोड़ा और आगे इस बारे में सोच करने के बाद ... मैं अगर मैं नियंत्रण बिंदुओं बेज़ियर पथ (प्रयुक्त गणना या प्रतिशत) की वक्र मैं करने के लिए होने के एक दूसरे को काटना बजाय गणना कर सकते हैं समायोजित कितना जानता था लगता है मेरे ऐप छेड़छाड़ वापस आ गया है। मुझे यकीन है कि यह एक मानक गणना/प्रतिशत है, क्या किसी को पता है कि यह गणना क्या है या इसे कहां मिलना है? –
तो छेड़छाड़ की गणना करने का समाधान डी Casteljau के एल्गोरिदम होना चाहिए। मेरे पास अभी यह लागू करने का समय नहीं है, लेकिन जब मैं करता हूं तो मैं अपना समाधान पोस्ट करूंगा। एक बार मेरे पास होने के बाद, मुझे वाई के मूल्य प्रदान करके अंतरण की गणना करने के लिए अपनी स्वयं की विधि बनाने में सक्षम होना चाहिए। –
वहां एक पोस्ट था जिसे बाद में पाइथागोरियन के प्रमेय का उपयोग करके परेशान कर दिया गया है ... इसकी प्रतिक्रिया मेरी अगली टिप्पणी में है। –