iPad用の簡単なグラフを作成しようとしています。QUARTZ を使用して、sin(x)、cos(x)、および tan(x) 関数をプロットする必要があります。グリッドと線の作成方法は知っていますが、これから始める方法がわかりません。どんな助けでも大歓迎です。
コア プロットやその他のフレームワークには興味がないので、これを回答として提供しないでください。
iPad用の簡単なグラフを作成しようとしています。QUARTZ を使用して、sin(x)、cos(x)、および tan(x) 関数をプロットする必要があります。グリッドと線の作成方法は知っていますが、これから始める方法がわかりません。どんな助けでも大歓迎です。
コア プロットやその他のフレームワークには興味がないので、これを回答として提供しないでください。
シンプル:必要な解像度/精度を決定し、それに応じて関数のドメインを間隔に分割し、各間隔で関数の値を計算し、それらを直線で接続します。
// 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);
}
からこれを呼び出します- drawRect::
- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];
    [self drawFunction:sin from:0.0 to: 2 * M_PI];
}