JavaScript支持三角函數(shù)。js中的三角函數(shù)都是靜態(tài)方法,必須使用Math來(lái)調(diào)用,因此語(yǔ)法格式為“Math.sin(x)”,“Math.cos(x)”,“Math.tan(x)”。
本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。
JavaScript支持三角函數(shù)。它們分別為:“Math.sin(x)”,“Math.cos(x)”,“Math.tan(x)”。
下面我們來(lái)看看JavaScript支持三角函數(shù)。
首先呢,我們復(fù)習(xí)一下高中時(shí)候?qū)W習(xí)的三角函數(shù)的的基本知識(shí)吧,我這里介紹其中幾個(gè)簡(jiǎn)單的,第一個(gè)是sin函數(shù),第二個(gè)是cos函數(shù) ,第三個(gè)是tan函數(shù),四四個(gè)是atan函數(shù),sin函數(shù)在數(shù)學(xué)里面其實(shí)是一個(gè)三角形的對(duì)邊比上斜邊得出的值,我們來(lái)看一個(gè)圖像
那么cos30=x/r
,cos函數(shù)是臨邊比上斜邊,tan30=y/x
,tan函數(shù)則是對(duì)邊比上臨邊,通過(guò)這些公式,我們可以很容易的得到這個(gè)三角函數(shù)的值,然后就闊以拿這些值去做有意思的事情啦??!
那么我們?cè)趈avascript里面的三角函數(shù)和數(shù)學(xué)中的三角函數(shù)其實(shí)有一點(diǎn)區(qū)別外,第一是寫(xiě)發(fā)上不一樣,js里面三角函數(shù)都是靜態(tài)方法,必須使用Math來(lái)調(diào)用,三個(gè)函數(shù)分別是Math.sin()
,Math.cos()
,Math.tan()
。
這個(gè)很容易理解咯,那么第二個(gè)不同就是數(shù)學(xué)里面的三角函數(shù)使用接受的參數(shù)是角度,但是在js里面所接受的參數(shù)是弧度,有的朋友可能暈了,弧度角度什么玩意???不要著急,這里簡(jiǎn)單介紹一下,我們首先來(lái)看一個(gè)圓
如果一個(gè)圓的一段邊的長(zhǎng)度等于這個(gè)圓的半徑長(zhǎng)度,那么這段邊就代表一弧度,正如圖中紅色部分,就代表一弧度,這個(gè)其實(shí)僅僅就是一個(gè)概念,我們真正要使用的是吧我們想要的角度轉(zhuǎn)化成弧度,這里直接套用數(shù)學(xué)公公式 1角度=π/180
那么10個(gè)角度就等于10*π/180
啦
那我們要用js的Math.sin()
算出30度角等于多少,那么就應(yīng)該寫(xiě)成Math.sin(30*Math.PI/180)
,這里注意一下js里面的π
是Math.PI
。相信大家看到這里對(duì)js的三角函數(shù)肯定有一些了解咯,那么接下來(lái)我們來(lái)看一個(gè)實(shí)際的小例子吧。
首先呢,有一個(gè)需求。頁(yè)面上有一個(gè)小球,我希望當(dāng)我的鼠標(biāo)放到頁(yè)面上時(shí)候,我的鼠標(biāo)移動(dòng)到那里。小球就會(huì)移動(dòng)到對(duì)應(yīng)的位置,注意,不是移動(dòng)到鼠標(biāo)所在的位置,而是對(duì)應(yīng)的位置,這里不好發(fā)網(wǎng)址,發(fā)個(gè)圖看看吧。
其中,紅色小球代表一個(gè)槍口。藍(lán)色的小球代表鼠標(biāo)的位置,當(dāng)鼠標(biāo)放置到頁(yè)面不同位置的時(shí)候,紅色的小球就會(huì)移動(dòng)到相應(yīng)的角度上與之對(duì)應(yīng),但是我們也看到有一個(gè)r,表示在平面的范圍呢,紅色小球能夠移動(dòng)的范圍,實(shí)際上就是一個(gè)圓的半徑,如果這個(gè)r越大,那么小球移動(dòng)的范圍就越大啦?。。ú焕斫獾呐笥严劝严旅娴睦訌?fù)制出來(lái)運(yùn)行一下就可以了)
這個(gè)功能的實(shí)現(xiàn)就需要我們使用三角函數(shù)來(lái)完成,檢測(cè)鼠標(biāo)的位置并且是在360度的范圍上來(lái)檢測(cè),這里就需要通過(guò)角度就算出紅色小球的距離左邊值和距離上邊的值,然后賦值給小球就闊以啦??!我們?cè)賮?lái)看一張圖
下面是這個(gè)案例的代碼,有興趣的朋友可以看看!
/***********例子來(lái)了*************/ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>Document</title> <style> #box{width:30px;height:30px;background:red;position:absolute;top:400px;left:400px;border-radius:15px;} </style> </head> <body> <p id="box"></p> </body> <script> var obox = document.getElementById('box'); var r=50; document.onmousemove=function(ev){ var oev = ev||event; var x = Math.abs(oev.clientX-obox.offsetLeft); var y = Math.abs(oev.clientY-obox.offsetTop); var angle = Math.atan(y/x); var cx=0; var cy=0; if(oev.clientX>=obox.offsetLeft && oev.clientY<=obox.offsetTop){ cx = Math.cos(angle)*r; cy = Math.sin(angle)*-r; } if(oev.clientX<obox.offsetLeft && oev.clientY<obox.offsetTop){ cx = Math.cos(angle)*-r; cy = Math.sin(angle)*-r; } if(oev.clientX<obox.offsetLeft && oev.clientY>obox.offsetTop){ cx = Math.cos(angle)*-r; cy = Math.sin(angle)*r; } if(oev.clientX>obox.offsetLeft && oev.clientY>obox.offsetTop){ cx = Math.cos(angle)*r; cy = Math.sin(angle)*r; } obox.style.top = 400+cy+'px'; obox.style.left = 400+cx+'px'; } </script> </html>
【推薦學(xué)習(xí):javascript高級(jí)教程】