成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

《每周一點(diǎn)canvas動(dòng)畫(huà)》——圓周運(yùn)動(dòng)

EscapedDog / 1626人閱讀

摘要:接每周一點(diǎn)動(dòng)畫(huà)波形運(yùn)動(dòng)圓周運(yùn)動(dòng)可以分為兩種基本的形式正圓運(yùn)動(dòng)和橢圓運(yùn)動(dòng)。上圖展示了從圓的函數(shù)表達(dá)式到圓的參數(shù)方程之間的轉(zhuǎn)換過(guò)程。而圓的參數(shù)方程就表示的是一個(gè)圓。三兩點(diǎn)之間的距離按理來(lái)說(shuō),連點(diǎn)之間的距離是不會(huì)用到三角函數(shù)的。

接《每周一點(diǎn)canvas動(dòng)畫(huà)》——波形運(yùn)動(dòng)

圓周運(yùn)動(dòng)可以分為兩種基本的形式:正圓運(yùn)動(dòng)橢圓運(yùn)動(dòng)。
在講解圓周運(yùn)動(dòng)之前,必不可少的數(shù)學(xué)公式即將襲來(lái)。so,各位騷年們,請(qǐng)護(hù)好自己的膝蓋。聽(tīng)不懂沒(méi)關(guān)系,只要明白其中的原理就行。當(dāng)然,能懂是最好的,這對(duì)后面學(xué)習(xí)高級(jí)動(dòng)畫(huà)是很有幫助的。好吧,廢話少說(shuō)直接上菜。

1.正圓運(yùn)動(dòng)

一般情況下,圓的直角坐標(biāo)方程可以表示為:x2+y2=R2,根據(jù)此公式可以得出圓在直角坐標(biāo)中的軌跡。也許,你會(huì)說(shuō)這樣就可以通過(guò)改變x,y的坐標(biāo)位置讓物體做圓周運(yùn)動(dòng)。但是,實(shí)際情況是這種方法并不可行。因?yàn)?,你無(wú)法精確的計(jì)算出物體做圓周運(yùn)動(dòng)的每一個(gè)坐標(biāo)位置。就算你成功計(jì)算出物體做圓周運(yùn)動(dòng)的精確坐標(biāo)。OK!你可以想象那是多么大的工作量。所以,我們需要轉(zhuǎn)變思路,讓計(jì)算機(jī)去做這種精確的計(jì)算問(wèn)題。

上圖展示了從圓的函數(shù)表達(dá)式到圓的參數(shù)方程之間的轉(zhuǎn)換過(guò)程。理解不理解都沒(méi)有關(guān)系,總之你要明白,最終我們將 x, y 與 sin 和 cos 扯上關(guān)系了。而圓的參數(shù)方程就表示的是一個(gè)圓。這樣我們想要讓一個(gè)物體做圓周運(yùn)動(dòng),就只需要讓計(jì)算機(jī)自己去來(lái)計(jì)算每一幀物體所對(duì)應(yīng)的坐標(biāo)值。而我們所需要做的只是簡(jiǎn)單的改變θ值。有多簡(jiǎn)單呢,因?yàn)楦鶕?jù)sin,cos函數(shù)的周期性只需要每一幀自增一個(gè)值或自減一個(gè)值。具體代碼如下:

    window.onload = function(){
               var canvas = document.getElementById("canvas"),
                   context = canvas.getContext("2d");

               var ball = new Ball();

               var angle = 0, // 旋轉(zhuǎn)的角度
                   centerX = canvas.width/2,
                   centerY = canvas.height/2,
                   radius = 100, // 定義半徑
                   speed = 0.05; // 每幀旋轉(zhuǎn)角度的增加值

               (function drawFrame(){
                   window.requestAnimationFrame(drawFrame, canvas);
                   context.clearRect(0,0,canvas.width, canvas.height);

                   //centerX, centerY 的作用是讓球繞畫(huà)布中心旋轉(zhuǎn)
                   ball.x = centerX + Math.sin(angle)*radius;
                   ball.y = centerY + Math.cos(angle)*radius;

                   //角度增加
                   angle += speed;
                   ball.draw(context);
               }());
           }

效果圖

ok,自己動(dòng)手試試吧!看看是不是球體繞著畫(huà)布中心做著圓周運(yùn)動(dòng)呢!這里我們需要的條件比較多 angle 和 Radius,在后面的章節(jié)中我們將介紹如何只通過(guò) angle 就實(shí)現(xiàn)圓周運(yùn)動(dòng)。為了更容易理解,我勸你最好復(fù)習(xí)一下中學(xué)的知識(shí),哈哈!?。?/p> 2.橢圓運(yùn)動(dòng)

橢圓和正圓的不同之處可以這樣理解:正圓半徑在x軸和y軸上的距離是相同的,都是Radius.而橢圓則是不同的,我們用a, b 表示。

具體到代碼里,就是半徑不同了唄!是不是so easy,上代碼:

window.onload = function(){
            var canvas = document.getElementById("canvas");
            var context = canvas.getContext("2d");
            var ball = new Ball();
            
            var centerX = canvas.width/2,
                centerY = canvas.height/2,
                angle = 0,
                radiusX = 50,
                radiusY = 100,
                speed = 0.05;
            
                ball.x = centerX;
                ball.y = centerY;
                
             context.fillStyle = "rgba(0,0,0,.01)"; 
            (function drawFrame(){
                window.requestAnimationFrame(drawFrame,canvas);
                context.fillRect(0,0,canvas.width,canvas.height);
                
                //當(dāng)radius的值相等時(shí)為圓周運(yùn)動(dòng)
                //當(dāng)radius的值不想等是為橢圓運(yùn)動(dòng)
                ball.x = centerX + Math.sin(angle)*radiusX; //radiusX = 50
                ball.y = centerY + Math.cos(angle)*radiusY; //radiusY = 100
                angle += speed;
                
                ball.draw(context);
            })();
        }

為了讓橢圓的效果看起來(lái)更加明顯,代替clearRect采用fillRect是小球的運(yùn)動(dòng)形成尾跡。

三、兩點(diǎn)之間的距離

按理來(lái)說(shuō),連點(diǎn)之間的距離是不會(huì)用到三角函數(shù)的。但是,其實(shí)兩點(diǎn)間的距離公式是可以通過(guò)勾股定理推出來(lái)的,所以這里直接就把他歸到三角函數(shù)里。
這里就不畫(huà)示意圖了直接給你個(gè)公式好了(原諒我偷個(gè)懶),假設(shè)有兩個(gè)點(diǎn), a(x1, y1), b(x2, y2)。那么怎樣求它們之間的距離呢!公式如下:

    dx = x2 - x1;
    dy = y2 - y1;
    distance = Math.sqrt(dx*dx + dy*dy); //這不就是勾股定理

這里給你個(gè)小的Demo,代碼如下:

    
           your browser not support canvas!
       
       

效果圖

四、總結(jié)
    ## 角度旋轉(zhuǎn)
    dx = mouse.x - object.x;
    dy = mouse.y - object.y;
    object.rotation = Math.atan2(dy,dx)*180/Math.PI

    ## 平滑運(yùn)動(dòng)
       value = center + Math.sin(angle)*range;
       angle += speed;

    ## 正圓運(yùn)動(dòng)
       x_position = centerX + Math.sin(angle)*radius;
       y_position = centerY + Math.cos(angle)*radius;
       angle += speed;

    ## 橢圓運(yùn)動(dòng)
       x_position = centerX + Math.cos(angle)*radiusX;
       y_position = centerY + Math.sin(angle)*radiusY;
       angle += speed;

    ##兩點(diǎn)間距離
    dx = x2 - x1;
    dy = y2 - y1;
    dist = Math.sqrt(dx*dx + dy*dy);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/81619.html

相關(guān)文章

  • 周一點(diǎn)canvas動(dòng)畫(huà)》——速度與加速度(2)

    摘要:重力加速度在這一部分我們介紹加速度中比較特別的一個(gè)重力加速度。重力加速度其實(shí)是由兩個(gè)物體間的引力形成的,到后面我們專(zhuān)門(mén)會(huì)有一個(gè)章節(jié)來(lái)介紹萬(wàn)有引力,并且將它運(yùn)用于我們的動(dòng)畫(huà)之中。 在上一節(jié)中我們介紹了速度的基本概念,包括沿坐標(biāo)軸的速度,和更普適的任意方向的速度,在文章的最后我們做了一個(gè)鼠標(biāo)跟隨的示例,以及通過(guò)改變物體的rotation屬性做了一個(gè)關(guān)于速度的擴(kuò)展。通過(guò)上一節(jié)的學(xué)習(xí)你會(huì)發(fā)現(xiàn)我...

    ZweiZhao 評(píng)論0 收藏0
  • 周一點(diǎn)canvas動(dòng)畫(huà)》——速度與加速度(2)

    摘要:重力加速度在這一部分我們介紹加速度中比較特別的一個(gè)重力加速度。重力加速度其實(shí)是由兩個(gè)物體間的引力形成的,到后面我們專(zhuān)門(mén)會(huì)有一個(gè)章節(jié)來(lái)介紹萬(wàn)有引力,并且將它運(yùn)用于我們的動(dòng)畫(huà)之中。 在上一節(jié)中我們介紹了速度的基本概念,包括沿坐標(biāo)軸的速度,和更普適的任意方向的速度,在文章的最后我們做了一個(gè)鼠標(biāo)跟隨的示例,以及通過(guò)改變物體的rotation屬性做了一個(gè)關(guān)于速度的擴(kuò)展。通過(guò)上一節(jié)的學(xué)習(xí)你會(huì)發(fā)現(xiàn)我...

    flyer_dev 評(píng)論0 收藏0
  • 周一點(diǎn)canvas動(dòng)畫(huà)》——波形運(yùn)動(dòng)

    摘要:在上一節(jié)我們介紹了動(dòng)畫(huà)中有關(guān)三角函數(shù)的內(nèi)容,以及一個(gè)跟隨鼠標(biāo)旋轉(zhuǎn)的箭頭動(dòng)畫(huà)。這一節(jié)主要介紹三角函數(shù)的波形運(yùn)動(dòng)。我們用函數(shù)模仿的第一個(gè)運(yùn)動(dòng),就是這種類(lèi)似水草擺動(dòng)的運(yùn)動(dòng)。脈沖運(yùn)動(dòng)便是將函數(shù)運(yùn)用于物體大小的變化中。 在上一節(jié)我們介紹了canvas動(dòng)畫(huà)中有關(guān)三角函數(shù)的內(nèi)容,以及一個(gè)跟隨鼠標(biāo)旋轉(zhuǎn)的箭頭動(dòng)畫(huà)。這一節(jié)主要介紹三角函數(shù)的波形運(yùn)動(dòng)。包括: 平滑運(yùn)動(dòng) 線性運(yùn)動(dòng) 脈沖運(yùn)動(dòng) 1.Sin函數(shù)...

    BingqiChen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<