我想创建一个图形计算器,我坚持使用图形位。我想知道如何绘制sin(x)cos(x)tan(x)的图形。我已经制作了网格。我不想使用核心情节框架。
任何帮助将不胜感激。 感谢。
答案 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;
}