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