Xcode图形计算器sin(X)cos(x)tan(x)

时间:2013-03-24 01:33:08

标签: xcode core-graphics calculator

我想创建一个图形计算器,我坚持使用图形位。我想知道如何绘制sin(x)cos(x)tan(x)的图形。我已经制作了网格。我不想使用核心情节框架。

任何帮助将不胜感激。 感谢。

3 个答案:

答案 0 :(得分:1)

要实际绘制函数,请使用纸和笔进行绘制:评估多个输入的函数。然后画线以连接结果点。

答案 1 :(得分:0)

以下是一些可以回答您问题的伪代码:

for i = xmin to xmax do
{
   draw XY point at X=(i*x_scale_factor+x_offset) and Y=(sin(i)*y_scale_factor+Y_offset);
}

请注意:不要在for循环中使用浮动

编辑以回应评论

最简单的方法是恕我直言,获取视图的边界,获取X轴和Y轴上数据的最小值和最大值。

然后,您可以使用NSAffineTransform实例来转换图形的坐标。所以一切都可以在你的图形坐标中完成,这更容易。如果您愿意,可以在坐标(4.6,3.2 * 10-7)处写一个标签。这是帮助您入门的关键点。这条路漫长。但使用NSAffineTransform会更容易。

答案 2 :(得分:0)

不是我实际上会这样做(我会看看Core Plot),但是您可以使用Core Image生成器过滤器绘制这样的图形,如下所示:

//wavelength and magnitude are distances in destination pixels. Think of them as the width and height of each wave.
kernel vec4 sineWave(float wavelength, float magnitude, __color color)
{
    vec2 coord = destCoord();
    coord.y -= magnitude;
    coord /= vec2(wavelength, magnitude / 2.0);
    float pi = radians(180.0);

    float value = sin(coord.x * pi);

    //Smaller threshold = finer wave line. For a gradient, replace the comparison with 1.0 - abs(…).
    float threshold = 0.1;
    float alpha = abs(coord.y - value) <= threshold;
    return color * alpha;
}

Screenshot of Quartz Composer rendering output from this kernel