2013-03-30 3 views
1

나는 ipad에 대한 간단한 그래프를 만들려고합니다. QUARTZ를 사용하여 sin (x), cos (x) 및 tan (x) 함수를 그려야합니다. 그리드와 라인을 만드는 방법을 알고 있지만 이것을 어떻게 시작해야할지 모르겠습니다. 어떤 도움을 주셔서 감사합니다.Quartz를 사용하여 선 그래프 그리기?

코어 플롯 및 기타 프레임 워크에 관심이 없으므로이 답변을 제공하지 마십시오.

+0

핵심 플롯 어쨌든 함수 그래프를 그릴하지 않습니다. –

답변

2

간단 : 원하는 해상도/정밀도를 결정한 다음 함수 도메인을 그 간격에 따라 분할하면 각 간격의 함수 값이 계산되고 직선으로 연결됩니다.

- drawRect:에서
// Within a subclass of UIView 
- (void)drawFunction:(double (*)(double))fn from:(double)x1 to:(double)x2 
{ 
    [super drawRect:rect]; 

    CGContextRef ctx = UIGraphicsGetCurrentContext(); 

    CGFloat comps[] = { 1.0, 0.0, 0.0, 1.0 }; 
    CGContextSetStrokeColor(ctx, comps); 
    CGContextSetLineWidth(ctx, 2.0); 

    const double dx = 0.01; // precision 
    double scale_x = self.bounds.size.width/(x2 - x1); 
    double off_x = 0.0; 
    double scale_y = scale_x; 
    double off_y = self.bounds.size.height/2; 

    CGContextMoveToPoint(ctx, x1 * scale_x - off_x, off_y - fn(x1) * scale_y); 

    for (double x = x1 + dx; x <= x2; x += dx) { 
     double y = fn(x); 
     CGFloat xp = x * scale_x - off_x; 
     CGFloat yp = off_y - y * scale_y; 
     CGContextAddLineToPoint(ctx, xp, yp); 
    } 

    CGContextStrokePath(ctx); 
} 

콜이 :

- (void)drawRect:(CGRect)rect 
{ 
    [super drawRect:rect]; 
    [self drawFunction:sin from:0.0 to: 2 * M_PI]; 
} 
+0

안녕하세요 답변에 대한 감사하지만 이것은 무언가를 그리거나 무언가를 놓치고있다 –

+0

@JamesDouglas (나는 거의 당신이 "hey this was not !!!!!"로 돌아올 것이라고 확신했다.) 확실히. 크기, 한계에주의를 기울여서 스트로크 색상과 선폭을 설정하십시오. 끝 부분에서'CGContextStrokePath()'를 호출하십시오.'CGContexRef' 문서를 읽어보십시오. –

+0

그래도 재생할 수 있습니다. Lol –

관련 문제