国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

【JS圖形學(xué)基礎(chǔ)】二維圖形學(xué)的變換

mozillazg / 2724人閱讀

摘要:計(jì)算機(jī)圖形學(xué)中的應(yīng)用非常廣泛的變換是一種稱(chēng)為仿射變換的特殊變換,在仿射變換中的基本變換包括平移旋轉(zhuǎn)縮放剪切這幾種。表示縮小,表示放大錯(cuò)切圖像錯(cuò)切變換在圖像幾何形變方面非常有用,常見(jiàn)的錯(cuò)切變換分為方向與方向的錯(cuò)切變換。

二維圖形學(xué)的變換

使用過(guò)前端的css3,canva,svg的小伙伴應(yīng)該對(duì)平移,旋轉(zhuǎn),縮放,剪切這些效果變換應(yīng)該很熟悉了,但應(yīng)該大部分小伙伴應(yīng)該不清楚其中的原理,在二維圖形方面如果能熟練使用圖形學(xué)的基礎(chǔ)算法,結(jié)合canva,svg會(huì)有意想不到的驚喜。

計(jì)算機(jī)圖形學(xué)中的應(yīng)用非常廣泛的變換是一種稱(chēng)為仿射變換的特殊變換,在仿射變換中的基本變換包括平移、旋轉(zhuǎn)、縮放、剪切這幾種。

平移

設(shè)某點(diǎn)向x方向移動(dòng)dx,y方向移動(dòng)dy ,[x,y]為變換前坐標(biāo),[X,Y]為變換后坐標(biāo)。

 X = x+dx;  Y = y+dy;

以矩陣表示:

旋轉(zhuǎn)

首先要明確旋轉(zhuǎn)在二維中是繞著某一個(gè)點(diǎn)進(jìn)行旋轉(zhuǎn),三維中是繞著某一個(gè)軸進(jìn)行旋轉(zhuǎn)。二維旋轉(zhuǎn)中最簡(jiǎn)單的場(chǎng)景是繞著坐標(biāo)原點(diǎn)進(jìn)行的旋轉(zhuǎn),如下圖所示:

如圖所示點(diǎn)v 繞 原點(diǎn)旋轉(zhuǎn)θ角,得到點(diǎn)v’,假設(shè) v點(diǎn)的坐標(biāo)是(x, y) ,那么可以推導(dǎo)得到 v’點(diǎn)的坐標(biāo)(x’, y’),設(shè)原點(diǎn)到v的距離是r,原點(diǎn)到v點(diǎn)的向量與x軸的夾角是?

x=rcos?y=rsin?
 
x′=rcos(θ+?)y′=rsin(θ+?)

通過(guò)三角函數(shù)展開(kāi)得到

x′=rcosθcos??rsinθsin?
 
y′=rsinθcos?+rcosθsin?

帶入x和y表達(dá)式得到

x′=xcosθ?ysinθ
 
y′=xsinθ+ycosθ

寫(xiě)成矩陣的形式是:

盡管圖示中僅僅表示的是旋轉(zhuǎn)一個(gè)銳角θ的情形,但是我們推導(dǎo)中使用的是三角函數(shù)的基本定義來(lái)計(jì)算坐標(biāo)的,因此當(dāng)旋轉(zhuǎn)的角度是任意角度(例如大于180度,導(dǎo)致v’點(diǎn)進(jìn)入到第四象限)結(jié)論仍然是成立的。

繞任意點(diǎn)的二維旋轉(zhuǎn)

縮放 簡(jiǎn)單縮放

簡(jiǎn)單縮放可以直接通過(guò)將縮放系數(shù)sx,sy與對(duì)應(yīng)x,y坐標(biāo)相乘:

x’=x*sx,y’=y*sy
基于一個(gè)固定點(diǎn)縮放

x’ = x * sx + sy(1-sx)
y’ = y * sy + yf(1-sy)

其中sx,sy屬于縮放系數(shù)。0~1表示縮小,>1表示放大

錯(cuò)切

圖像錯(cuò)切變換在圖像幾何形變方面非常有用,常見(jiàn)的錯(cuò)切變換分為X方向與Y方向的錯(cuò)切變換。對(duì)應(yīng)的數(shù)學(xué)矩陣分別如下:

根據(jù)上述矩陣假設(shè)P(x1, y1)為錯(cuò)切變換之前的像素點(diǎn),則錯(cuò)切變換以后對(duì)應(yīng)的像素

P’(x2, y2)當(dāng)X方向錯(cuò)切變換時(shí):

x2 = x1 - y1 * tanθ
y2 = y1

當(dāng)Y方向錯(cuò)切變換時(shí):

x2 = x1
y2 = y1 - x1 * tanθ
實(shí)例 svg canvas

只貼上旋轉(zhuǎn)的demo,其他都可以仿照套用

旋轉(zhuǎn)

橘色的點(diǎn)圍繞藍(lán)色旋轉(zhuǎn)

var canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");
    context.beginPath();
    context.fillStyle = "#3399ff";
    context.arc(100, 75, 5, 0, 2 * Math.PI);
    context.fill();

    //點(diǎn)a圍繞(100,75) 順時(shí)針90度旋轉(zhuǎn)
    var a = { x: 150, y: 75 }
    //套用上文公式
    //- 0.5 * Math.PI 因?yàn)閏anvas的0
    var x = 100 + (a.x - 100) * Math.cos(Math.PI / 2) - (a.y - 75) * Math.sin(Math.PI / 2);
    //y為簡(jiǎn)化后
    var y = 75 + (a.x - 100) * Math.sin(Math.PI / 2);
    context.beginPath();
    context.fillStyle = "#fe9901";
    context.arc(x, y, 5, 0, 2 * Math.PI);
    context.fill();

    //圍繞100,75 60度旋轉(zhuǎn)
    var x = 100 + 50 * Math.cos(Math.PI / 3);
    var y = 75 + 50 * Math.sin(Math.PI / 3);
    context.beginPath();
    context.fillStyle = "#fe9901";
    context.arc(x, y, 5, 0, 2 * Math.PI);
    context.fill();

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

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

相關(guān)文章

  • 前端圖像處理指南

    摘要:本文會(huì)介紹位圖處理,矢量圖和圖像處理,重點(diǎn)是,并且最后會(huì)附上一個(gè)小應(yīng)用。以上列舉部分,更多備胎在此矢量圖處理講完位圖再說(shuō)矢量圖。矢量圖在繪制圖標(biāo)商業(yè)動(dòng)畫(huà)元素上應(yīng)用非常廣范。 計(jì)算機(jī)圖像處理是一門(mén)很成熟的技術(shù),任何一門(mén)可操作系統(tǒng)接口的語(yǔ)言都能很輕易的實(shí)現(xiàn)各種處理操作。但是前端限于瀏覽器環(huán)境和接口限制,處理起來(lái)會(huì)有諸多不便,這里所說(shuō)的前端圖像處理,是真的指不借助任何后端服務(wù)純前端實(shí)現(xiàn)的圖像...

    Anshiii 評(píng)論0 收藏0
  • 前端圖像處理指南

    摘要:本文會(huì)介紹位圖處理,矢量圖和圖像處理,重點(diǎn)是,并且最后會(huì)附上一個(gè)小應(yīng)用。以上列舉部分,更多備胎在此矢量圖處理講完位圖再說(shuō)矢量圖。矢量圖在繪制圖標(biāo)商業(yè)動(dòng)畫(huà)元素上應(yīng)用非常廣范。 計(jì)算機(jī)圖像處理是一門(mén)很成熟的技術(shù),任何一門(mén)可操作系統(tǒng)接口的語(yǔ)言都能很輕易的實(shí)現(xiàn)各種處理操作。但是前端限于瀏覽器環(huán)境和接口限制,處理起來(lái)會(huì)有諸多不便,這里所說(shuō)的前端圖像處理,是真的指不借助任何后端服務(wù)純前端實(shí)現(xiàn)的圖像...

    CatalpaFlat 評(píng)論0 收藏0
  • Three.js學(xué)碎碎叨(Day 1)

    摘要:如你所見(jiàn),這系列文章都是我自己的碎碎叨,當(dāng)然啦,目的是為了能更好的梳理自己學(xué)習(xí)的知識(shí),加強(qiáng)印象,順便再來(lái)做個(gè)總結(jié),這樣能更加扎實(shí)的學(xué)習(xí)。 一直就很想學(xué)習(xí)WebGL相關(guān)的知識(shí),現(xiàn)在也找到了工作,生活也差不多趨向穩(wěn)定了,加上學(xué)校也沒(méi)那么多課程了,所以我肯定要利用起來(lái)這個(gè)時(shí)間啊!因?yàn)橥人耍瑖?guó)慶估計(jì)是在家躺7天,所以更加要抓住這么好的學(xué)習(xí)時(shí)機(jī)了。如你所見(jiàn),這系列文章都是我自己的碎碎叨,當(dāng)然...

    focusj 評(píng)論0 收藏0
  • 數(shù)學(xué)與Python有機(jī)結(jié)合及統(tǒng)計(jì)學(xué)、微積分、線(xiàn)性代數(shù)相關(guān)資源、圖形軟件

    摘要:微積分微積分的課程我們也同樣是推薦和的課程。還有一個(gè)斯坦福大學(xué)的統(tǒng)計(jì)學(xué)習(xí)入門(mén)英文字幕相當(dāng)不錯(cuò)。所以,除了繪制數(shù)學(xué)圖形外,學(xué)習(xí)數(shù)學(xué)就應(yīng)該完全與編程有機(jī)結(jié)合。 無(wú)論是三大數(shù)學(xué)軟件Matlab(通信、控制等工程例外)、Maple、Mathematica,還是三大統(tǒng)計(jì)軟件Spass、Stata、SAS,這些可視化的軟件本身就是編程的一個(gè)體現(xiàn),它們?cè)谝欢ǔ潭壬辖档土宋覀兪褂脭?shù)學(xué)的門(mén)檻,但另一方面...

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

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

0條評(píng)論

閱讀需要支付1元查看
<