2013-03-24 100 views
2

我想創建一個圖形計算器,並且Im與圖位保持一致。我想知道如何繪製sin(x)cos(x)tan(x)的圖形。我已經制作了電網。我不想使用核心劇情框架。Xcode圖計算器sin(X)cos(x)tan(x)

任何幫助,將不勝感激。 謝謝。

+0

什麼樣的你尋求的幫助?我爲繪圖(數據源,控制器,視圖等)製作了幾門課,但是它有2500線和12課。太多的東西要張貼在這裏。告訴我們需要幫助的部分(繪製座標軸,計算刻度等),我們可能會提供幫助。我提到軸線和比例,因爲這些是繪圖的關鍵點。 – Jean 2013-03-24 01:37:47

+0

你能更具體嗎?你甚至不知道你是在MacOS X還是iOS上工作,更不用說你遇到了什麼問題。 – Caleb 2013-03-24 01:38:10

+0

@Jean是的,我需要幫助繪製軸和縮放,感謝您的幫助! – 2013-03-24 03:06:15

回答

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); 
} 

而且要注意:不要在響應中使用的float循環

編輯以評論

最簡單的方法,恕我直言,將獲得您的觀點的界限,以獲得您的數據在X軸和Y軸上的最小值和最大值。

然後,您可以使用NSAffineTransform實例來轉換繪圖的座標。所以一切都可以在你的圖形座標中完成,這很容易。如果您願意,您可以在座標(4.6,3.2 * 10-7)上書寫標籤。這是讓你開始的關鍵。路很長。但使用NSAffineTransform會使它更容易。

+0

只是爲了澄清:浮點數可以作爲循環變量,但不要測試它們是否相等;使用<, >,<=等等 – Caleb 2013-03-24 01:58:03

+0

哪些確實傾向於發生在for循環中...'for(double d = 0; d <10.0; d + = 0.1)...' – Jean 2013-03-24 02:01:05

0

不,我真的做到這一點(我想看看核心地塊),但你可以使用一個核心圖像生成過濾器繪製這樣的圖,像這樣:

//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

+0

嗨Peter,謝謝你的幫助!這個想法是創建這樣的事情:http://www.youtube.com/watch?v=8cIh1Ohrfzs我有網格和計算器部分工作,但想知道如何將三角函數繪製到網格中。 – 2013-03-24 10:10:33