내 숙제 베 지어 곡선을 그릴 폴 드 Casteljau 알고리즘을 사용하려고를 사용하여 목표 C에서 베 지어 곡선을 만들고,하지만 완벽하지 것 같다, 여기에 코드는는 폴 드 Casteljau 알고리즘
- (void)recursive_bezier :(double)x1 :(double)y1
:(double)x2 :(double)y2
:(double)x3 :(double)y3
:(double)x4 :(double)y4
{
count = count+1;
// Calculate all the mid-points of the line segments
//----------------------
double x12 = (x1 + x2)/2;
double y12 = (y1 + y2)/2;
double x23 = (x2 + x3)/2;
double y23 = (y2 + y3)/2;
double x34 = (x3 + x4)/2;
double y34 = (y3 + y4)/2;
double x123 = (x12 + x23)/2;
double y123 = (y12 + y23)/2;
double x234 = (x23 + x34)/2;
double y234 = (y23 + y34)/2;
double x1234 = (x123 + x234)/2;
double y1234 = (y123 + y234)/2;
if(isFlat)
{
// // Draw and stop
// //----------------------
[self drawLine:x1 :y1 :x4 :y4];
}
else
{
// Continue subdivision
//----------------------
if (count == 5) {
isFlat=true;
}
[self recursive_bezier:x1 :y1 :x12 :y12 :x123 :y123 :x1234 :y1234];
[self recursive_bezier:x1234 :y1234 :x234 :y234 :x34 :y34 :x4 :y4];
}
}
- (void)drawLine :(double)x1 :(double)y1
:(double)x4 :(double)y4{
countDraw = countDraw+1;
NSLog(@"============%d============",countDraw);
NSLog(@"x1 = %f y1 = %f",x1, y1);
NSLog(@"x4 = %f y4 = %f",x4, y4);
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(x1, y1)];
[path addLineToPoint:CGPointMake(x4, y4)];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = [path CGPath];
shapeLayer.strokeColor = [[UIColor blueColor] CGColor];
shapeLayer.lineWidth = 2.0;
shapeLayer.fillColor = [[UIColor clearColor] CGColor];
[self.view.layer addSublayer:shapeLayer];
}
은 오른쪽이 계산되지 않은 사람이 왜 저를 도와 드릴 방법과 곡선이 부드럽게 만들기 위해?
추신 : 내가 문제는 isFlat
이 true로 설정되면, 더 이상의 세그먼트도 최상위 수준에 적절하게 분할되지 않을 것입니다 Bezier Curve Algorithm
"숙제하는 것"보다는 상대적으로 효율적이고 효율적으로 수행해야하는 코드를 작성하는 데 관심이있는 프로그래머입니다. 숙제에 * 재귀를 사용해야합니까? 왜냐하면'for' 루프로 이것을하는 것이 훨씬 더 효율적이기 때문입니다. (재귀는 시간과 메모리를 낭비하는 호출 스택을 낭비합니다. 여기서는 전체적으로 * 불필요합니다) –
이 숙제는 재귀 적이어야합니다. :) – xeravim
이것이 재귀마다 끔찍한 방법이라는 것을 교사에게 알려주십시오.) –