我已经使用贝塞尔曲线的参数表达式来定位我的曲线上的一个点,并且它正在正常工作。问题是我将我的t
值设置为 y 轴的百分比,不幸的是(显然)它不相关,因为我的曲线比我的 Y 轴长。所以在这个程序中,如果我将 Y 值设置为 75,我想返回位于 Y 值 25 处的线上的点(相反,因为在 iOS 中 (0, 0) 位于左上角而不是底部在我的图表中显示)。当前设置我的 Y 值将我的曲线上的点重新调整为 75%,其 Y 值为 15.62。
有人建议如何将我的曲线上的点设置为 Y 而不是 75%?
这是上一个问题的后续问题,在路径上找到一个点,但我觉得它的不同足以保证它自己的线程。
#import "GraphView.h"
@interface GraphView ()
{
float yVal;
}
@end
@implementation GraphView
@synthesize myLabel, yValue;
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
yVal = 50;
}
return self;
}
- (IBAction)yValueTextField:(id)sender
{
yVal = yValue.text.intValue;
[self resignFirstResponder];
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect
{
float t = yVal / 100;
// Starting point
float p1x = 0;
float p1y = 100;
// Control point 1
float c1x = 50;
float c1y = 100;
// Control point 2
float c2x = 50;
float c2y = 0;
// End Point
float p2x = 100;
float p2y = 0;
CGPoint p1 = CGPointMake(p1x, p1y);
CGPoint c1 = CGPointMake(c1x, c1y);
CGPoint c2 = CGPointMake(c2x, c2y);
CGPoint p2 = CGPointMake(p2x, p2y);
// Cubic Bezier Curver Parmetic Expression
float X = pow((1 - t), 3) * p1x + 3 * pow((1 - t), 2) * t * c1x + 3 * (1 - t) * pow(t, 2) * c2x + pow(t, 3) * p2x;
float Y = pow((1 - t), 3) * p1y + 3 * pow((1 - t), 2) * t * c1y + 3 * (1 - t) * pow(t, 2) * c2y + pow(t, 3) * p2y;
myLabel.text = [NSString stringWithFormat:@"Coord = %.2f, %.2f", X, Y];
UIBezierPath *circle = [UIBezierPath bezierPathWithOvalInRect:CGRectMake((X - 2), (Y - 2), 4, 4)];
[[UIColor blackColor] setFill];
[circle fill];
UIBezierPath *curve = [[UIBezierPath alloc] init];
[curve moveToPoint:p1];
[curve addCurveToPoint:p2 controlPoint1:c1 controlPoint2:c2];
[curve setLineWidth:1];
[[UIColor blueColor] setStroke];
[curve stroke];
}
@end