【15】processing-三角函数(中文)
三角函數
艾拉·格林伯格
?
三角函數(實際上只是幾個三角函數)是圖形編程的核心。也就是說,如果你和我一樣,你可能對trig有模糊的記憶。也許你還記得記憶裝置soh-cah-to a,用來記住三角函數和直角三角形之間的關系。這是喚醒你記憶的圖表。
?soh代表“正弦等于斜邊上的對邊。”“對邊”是指角度相反的邊。
?cah代表“余弦等于斜邊上的相鄰度。”“相鄰”是角度旁邊的邊。
?toa是指“切線等于相對于相鄰點”
?
在圖中還應該注意切線等于正弦(θ)而不是余弦(θ)。你可能還記得正弦和余弦在作圖時是相似的,它們都形成周期波。只有余弦波在圖上移動了一位(90°或π/2),這在技術上稱為相移。我完全意識到抽象地處理這些事情是困難的。幸運的是,還有另一個模型,單位圓(如下所示)用于可視化和研究trig函數。
?
單位圓是一個半徑為1個單位長度的圓,因此它的名字很有想象力。使用單位圓時,不使用常規且可信的笛卡爾坐標系;而是使用極坐標系。笛卡爾系統在矩形網格空間中工作得很好,在那里一個點可以通過一個坐標定位,比如(x,y)。相反,在極坐標系中,位置由(r,θ)指定,其中r是半徑,θ(希臘字母theta)是旋轉角度。單位圓的原點位于其中心,您可以測量從單位圓的右中邊緣開始(面向3點鐘)并圍繞其逆時針方向移動的旋轉角度。
?
在單位圓圖中,p點位于45°或pi/4。您還可以使用pi來測量單位圓周圍的距離,如圖所示。在圓的中間(180°)等于π弧度,在圓的四周等于2pi弧度,也等于0弧度,因為圓是連續的,在其開始處結束。π是一個常數,等于圓的周長除以圓的直徑,約為3.142。
?
在極坐標系中,使用弧度來測量角度,而不是度數。以弧度表示的旋轉角通常稱為θ(希臘字母θ)。旋轉的弧長由r*θ計算,其中r是半徑。在半徑為1的單位圓中,θ等于旋轉的弧長(單位圓圖中的弧s)。知道弧長很好,但大多數時候(在計算機圖形學中),你只想知道點相對于單位圓的位置。例如,如果我想圍繞單位圓旋轉一個點,我需要知道如何在圓中放置和移動該點。對于單位圓來說,這是一個非常簡單的任務,而且正是trig的用途。
?
三角函數和單位圓之間有一個非常簡單的關系。注意,在單位圓圖中,從橢圓上的p點開始,單位圓內形成直角三角形。這會立刻讓你想起老畢達哥拉斯。還要注意r(半徑)是直角三角形的斜邊。此外,您現在還知道,使用trig函數,可以使用theta和任意一側(對邊、相鄰邊或斜邊)來求解三角形的其余部分。對于我們的目的,這些關系的最大好處是,要將極坐標系中的p點轉換為笛卡爾坐標系(監視器使用的系統),可以使用以下簡單表達式:
?
x = cosine(theta) * radius y = sine(theta) * radius?
這些看似謙遜的小表達方式非常強大,可以用于各種表達和有機的目的。
以下是在處理過程中如何實際使用trig函數:
?
?
float x = cos(radians(angle)) * radius; float y = sin(radians(angle)) * radius;注意每個trig函數調用中的函數調用(radians(angle))(弧度(角度))。記住θ是用弧度來測量的,在極坐標系中。但是,在笛卡爾坐標系中,以度數為單位。要在弧度和度數之間進行轉換,或者在弧度和度數之間進行轉換,可以使用以下表達式:
?
theta = angle*pi/180 angle = theta*180/pi?
或者更好的方法是,使用Processing的便捷轉換功能:
?
?
theta = radians(angle) angle = degrees(theta)最后,我還提供了一個處理示意圖,演示了單位圓和正弦函數之間的關系:
?
?
float px, py, px2, py2; float angle, angle2; float radius = 50; float frequency = 2; float frequency2 = 2; float x, x2;void setup(){size(600, 200);background (127); }void draw(){background (127);noStroke();fill(255);ellipse(width/8, 75, radius*2, radius*2);// 圍繞圓旋轉矩形px = width/8 + cos(radians(angle))*(radius);py = 75 + sin(radians(angle))*(radius);fill(0);rect (px, py, 5, 5);stroke(100);line(width/8, 75, px, py);stroke(200);//繼續重新初始化為0,以避免//重繪時閃爍angle2 = 0;// 繪制靜態曲線-y=sin(x)for (int i = 0; i< width; i++){px2 = width/8 + cos(radians(angle2))*(radius);py2 = 75 + sin(radians(angle2))*(radius);point(width/8+radius+i, py2);angle2 -= frequency2;}//沿正弦曲線發送小橢圓//說明圓與波的關系noStroke();ellipse(width/8+radius+x, py, 5, 5);angle -= frequency;x+=1;//當小橢圓到達窗口的末端時,//將變量設置回0if (x >= width-60) {x = 0;angle = 0;}//畫波與圓路徑連接的動力線stroke(50);line(px, py, width/8+radius+x, py);//輸出計算到屏幕text("y = sin x", 35, 185);text("px = " + px, 105, 185);text("py = " + py, 215, 185); }總結
以上是生活随笔為你收集整理的【15】processing-三角函数(中文)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定位之父、《定位》第一作者,艾里斯先生逝
- 下一篇: do sb suggest to_sug