校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > HTML5之SVG 2D入門6—視窗坐標系與用戶坐標系及變換概述

HTML5之SVG 2D入門6—視窗坐標系與用戶坐標系及變換概述

熱門標簽:高德地圖標注錯誤怎么修改 江蘇高頻外呼系統(tǒng)線路 地圖標注自己去過的地方 搜狗星級酒店地圖標注 會聲會影怎樣做地圖標注效果 電銷機器人視頻 洛陽市伊川縣地圖標注中心官網(wǎng) 平頂山電子地圖標注怎么修改 標準智能外呼系統(tǒng)

坐標系統(tǒng)
SVG存在兩套坐標系統(tǒng):視窗坐標系與用戶坐標系。默認情況下,用戶坐標系與視窗坐標系的點是一一對應的,都為原點在視窗的左上角,x軸水平向右,y軸豎直向下;如下圖所示: 

SVG的視窗位置一般是由CSS指定,尺寸由SVG元素的屬性width和height設(shè)置,但是如果SVG是存儲在embedded對象中(例如object元素,或者其他SVG元素),而且包含SVG的文檔是用CSS或者XSL格式化的,并且這些外圍對象的CSS或者其他指定尺寸的值已經(jīng)可以計算出視窗的尺寸了,則此時會使用外圍對象的尺寸。

這里需要區(qū)分視窗,視窗坐標系,用戶坐標系的概念:

視窗:指的是網(wǎng)頁上面可視的矩形局域,長度和寬度都是有限的,這個區(qū)域一般與外圍對象的尺寸有關(guān)。

視窗坐標系:本質(zhì)是一個坐標系,有原點,x軸與y軸;而且在兩個方向上是無限延伸的。默認情況下,原點在視窗的左上角,x軸水平向右,y軸豎直向下。可以對這個坐標系的點進行變換。

用戶坐標系:本質(zhì)是一個坐標系,有原點,x軸與y軸;而且在兩個方向上是無限延伸的。默認情況下,原點在視窗的左上角,x軸水平向右,y軸豎直向下。可以對這個坐標系的點進行變換。

默認情況下,視窗坐標系與用戶坐標系是重合的,但是這里需要注意,視窗坐標系屬于的是創(chuàng)建視窗的元素,視窗坐標系確定好以后,整個視窗的坐標基調(diào)就確定了。但是用戶坐標系是屬于每個圖形元素的,只要圖形進行了坐標變換,就會創(chuàng)建新的用戶坐標系,這個元素中所有的坐標和尺寸都使用這個新的用戶坐標系。

簡單點說:視窗坐標系描述了視窗中所有元素的初始坐標概況,用戶坐標系描述了每個元素的坐標概況,默認情況下,所有元素都使用默認的與視窗坐標系重合的那個用戶坐標系。

坐標空間變換
讓我們回顧一下canvas用戶坐標的變換,它們是通過平移,縮放,旋轉(zhuǎn)函數(shù)實現(xiàn)的;每次變換后對以后繪制的圖形都起作用,除非再次進行變換,這是"當前"用戶坐標系統(tǒng)的概念。canvas只有唯一一個用戶坐標系。
在SVG中,情況完全不同。SVG本身作為一種向量圖元素,它的兩個坐標系統(tǒng)本質(zhì)上都可以算作"用戶坐標系統(tǒng)";SVG的兩個坐標空間都是可以變換的:視窗空間變換和用戶空間變換。視窗空間變換由相關(guān)元素(這些元素創(chuàng)建了新的視窗)的屬性viewBox控制;用戶空間變換由圖形元素的transform屬性控制。視窗空間變換應用于對應的整個視窗,用戶空間變換應用于當前元素及其子元素。

視窗變換 - viewBox屬性

所有的能建立一個視窗的元素(看下一節(jié)),再加上marker,pattern,view元素,都有一個viewBox屬性。

viewBox屬性值的格式為(x0,y0,u_width,u_height),每個值之間用逗號或者空格隔開,它們共同確定了視窗顯示的區(qū)域:視窗左上角坐標設(shè)為(x0,y0)、視窗的寬設(shè)為u_width,高為u_height;這個變換對整個視窗都起作用。

這里一定不要混淆:視窗的大小和位置已經(jīng)由創(chuàng)建視窗的元素和外圍的元素共同確定了(例如最外層的svg元素建立的視窗由CSS,width和height確定),這里的viewBox其實是設(shè)置這個確定的區(qū)域能顯示視窗坐標系的哪個部分。
viewBox的設(shè)置其實是包含了視窗空間的縮放和平移兩種變換。

變換的計算也很簡單:以最外層的svg元素的視窗為例,假設(shè)svg的寬與長設(shè)置為width,height,viewBox的設(shè)置為(x0,y0,u_width,u_height)。則繪制的圖形,寬和高的縮放比例分別為:width/u_width, height/u_height。視窗的左上角的坐標設(shè)置為了(x0,y0)。

體會下面幾種代碼繪出的結(jié)果的不同:

復制代碼
代碼如下:

<svg width="200" height="200" viewBox="0 0 200 200">
<rect x="0" y="0" width="200" height="200" fill="Red" />
<rect x="0" y="0" width="100" height="100" fill="Green" />
</svg>

上面的例子繪制的圖中你可以看到綠色和紅色的矩形,這種情況下視窗坐標系的點還是與視窗上的點是一一對應的,這個也是默認情況。

復制代碼
代碼如下:

<svg width="200" height="200" viewBox="0 0 100 100">
<rect x="0" y="0" width="200" height="200" fill="Red" />
<rect x="0" y="0" width="100" height="100" fill="Green" />
</svg>

上面的例子繪制的圖中這個你只能看到綠色的矩形,而且綠色的矩形顯示在屏幕上是200*200像素的,這個時候坐標點已經(jīng)不是一一對應了,圖被放大了。

復制代碼
代碼如下:

<svg width="200" height="200" viewBox="0 0 400 400">
<rect x="0" y="0" width="200" height="200" fill="Red" />
<rect x="0" y="0" width="100" height="100" fill="Green" />
</svg>

上面的例子繪制的圖中,視窗坐標系的單位被縮小,所以兩個矩形都縮小了。

在日常工作中,我們經(jīng)常需要完成的一個任務就是縮放一組圖形,讓它適應它的父容器。我們可以通過設(shè)置viewBox屬性達到這個目的。

建立新視窗的元素
任何時候,我們都可以嵌套視窗。創(chuàng)建新的視窗的時候,也會創(chuàng)建新的視窗坐標系和用戶坐標系,當然也包括裁減路徑也會創(chuàng)建新的。下列是能建立新視窗的元素列表:
svg:svg支持嵌套。
symbol:當被use元素實例化的時候創(chuàng)建新的視窗。

image:引用svg元素時會創(chuàng)建新視窗。
foreignObject:創(chuàng)建新視窗去渲染里面的對象。

保持縮放的比例 - preserveAspectRatio屬性
有些時候,特別是當使用viewBox的時候,我們期望圖形占據(jù)整個視窗,而不是兩個方向上按相同的比例縮放。而有些時候,我們卻是希望圖形兩個方向是按照固定的比例縮放的。使用屬性preserveAspectRatio就可以達到控制這個的目的。
這個屬性是所有能建立一個新視窗的元素,再加上image,marker,pattern,view元素都有的。而且preserveAspectRatio屬性只有在該元素設(shè)置了viewBox以后才會起作用。如果沒有設(shè)置viewBox,則preserveAspectRatio屬性會被忽略。
屬性的語法如下:preserveAspectRatio="[defer] <align> [<meetOrSlice>]"
注意3個參數(shù)之間需要使用空格隔開。
defer:可選參數(shù),只對image元素有效,如果image元素中preserveAspectRatio屬性的值以"defer"開頭,則意味著image元素使用引用圖片的縮放比例,如果被引用的圖片沒有縮放比例,則忽略"defer"。所有其他的元素都忽略這個字符串。
align:該參數(shù)決定了統(tǒng)一縮放的對齊方式,可以取下列值:
  none - 不強制統(tǒng)一縮放,這樣圖形能完整填充整個viewport。
  xMinYMin - 強制統(tǒng)一縮放,并且把viewBox中設(shè)置的<min-x>和<min-y>對齊到viewport的最小X值和Y值處。
  xMidYMin - 強制統(tǒng)一縮放,并且把vivewBox中X方向上的中點對齊到viewport的X方向中點處,簡言之就是X方向中點對齊,Y方向與上面相同。
  xMaxYMin - 強制統(tǒng)一縮放,并且把viewBox中設(shè)置的<min-x> + <width>對齊到viewport的X值最大處。
  類似的還有其他類型的值:xMinYMid,xMidYMid,xMaxYMid,xMinYMax,xMidYMax,xMaxYMax。這些組合的含義與上面的幾種情況類似。
meetOrSlice:可選參數(shù),可以去下列值:
  meet - 默認值,統(tǒng)一縮放圖形,讓圖形全部顯示在viewport中。
  slice - 統(tǒng)一縮放圖形,讓圖形充滿viewport,超出的部分被剪裁掉。

下圖詮釋了各種填充的效果:



用戶坐標系的變換 - transform屬性
該類型變換是通過設(shè)置元素的transform屬性來指定的。這里需要注意,transform屬性設(shè)置的元素的變換,只影響該元素及其子元素,與別的元素無關(guān),不影響別的元素。

平移 - translate
平移變換把相關(guān)的坐標值平移到指定的位置,該變換需要傳入兩個軸上平移的量。看例子:

復制代碼
代碼如下:

<rect x="0" y="0" width="10" height="10" transform="translate(30,40)" />

這個例子繪制一個矩形,并把它的起點(0,0)平移到(30,40)處。雖然可以直接設(shè)置(x,y)的坐標值,但是使用平移變換去實現(xiàn)也很方便。這個變換第二個參數(shù)可以省略,默認當0處理。

旋轉(zhuǎn) - rotate
旋轉(zhuǎn)一個元素也是一個很常見的任務,我們可以使用rotate變換實現(xiàn),該變換需要傳入旋轉(zhuǎn)的角度參數(shù)。看例子:

復制代碼
代碼如下:

<rect x="20" y="20" width="20" height="20" transform="rotate(45)" />

這個例子會顯示一個旋轉(zhuǎn)45度的矩形。有幾點注意:
1.這里的變換是以角度值為參數(shù)的。
2.旋轉(zhuǎn)指的是相對于x軸的旋轉(zhuǎn)。
3.旋轉(zhuǎn)是圍繞用戶坐標系的原點(0,0)展開的。

傾斜 - skew
transform還支持傾斜變換,可以是沿著x軸的(左右傾斜,正角度為向右傾斜,其實是傾斜了y軸),或者是沿著y軸的(上下傾斜,正角度為向下傾斜,其實是傾斜了x軸)傾斜;該變換需要傳入一個角度參數(shù),這個角度參數(shù)會決定傾斜的角度。看下面的例子:

復制代碼
代碼如下:

<svg width="100" height="100">
<rect x="0" y="0" width="100" height="100" fill="green" />
<circle cx="15" cy="15" r="15" fill="red" />
<circle cx="15" cy="15" r="15" fill="yellow" transform="skewX(45)" />
<rect x="30" y="30" width="20" height="20" />
<rect x="30" y="30" width="20" height="20" transform="skewX(45)" />
<rect x="30" y="30" width="20" height="20" transform="skewY(45)" />
</svg>

從結(jié)果中,你可以直接看到同樣尺寸的矩形,在不同的傾斜變換后,得到的位置和形狀。這里注意矩形的起始位置都已經(jīng)改變了,這是因為在新的坐標系統(tǒng)中,(30,30)已經(jīng)在不同的位置了。

縮放 - scale
縮放對象由縮放變換完成,該變換接受2個參數(shù),分別指定在水平和豎直上的縮放比例,如果第二個參數(shù)省略則與第一個參數(shù)取相同的值。看下面的例子:

復制代碼
代碼如下:

<svg width="500" height="500">
<text x="20" y="20" font-size="20">ABC (scale)</text>
<text x="50" y="50" font-size="20" transform="scale(1.5)">ABC (scale)</text>
</svg>

變換矩陣 - matrix
學過圖形學的都知道,所有的變換其實都是由矩陣表征的,所以上面的變換其實都可以用一個3*3矩陣去表示:

復制代碼
代碼如下:

a c e
b d f
0 0 1

由于只有6個值用到了,所以也簡寫成[a b c d e f]。把matrix(a,b,c,d,e,f)賦給transfrom就可以實施相應的變換。變換會把坐標和長度都轉(zhuǎn)換成新的尺寸。上面各種變換對應的矩陣如下:

平移變換[1 0 1 0 tx ty]:

復制代碼
代碼如下:

1 0 tx
0 1 ty
0 0 1

縮放變換[sx 0 0 sy 0 0]:

復制代碼
代碼如下:

sx 0 0
0 sy 0
0 0 1

旋轉(zhuǎn)變換[cos(a) sin(a) -sin(a) cos(a) 0 0]:

復制代碼
代碼如下:

cos(a) -sin(a) 0
sin(a) cos(a) 0
00 1

沿X軸的傾斜[1 0 tan(a) 1 0 0]:

復制代碼
代碼如下:

1 tan(a) 0
0 1 0
0 0 1

沿Y軸的傾斜[1 tan(a) 0 1 0 0]:

復制代碼
代碼如下:

11 0
tan(a) 1 0
00 1

變換本質(zhì)
前面我們總結(jié)canvas的時候,我們知道各種變換都是作用在用戶坐標系上的。在SVG中,所有的變換也都是針對兩個坐標系(本質(zhì)上都是"用戶坐標系")的。當給容器對象或圖形對象指定"transform"屬性,或者給"svg,symbol,marker,pattern,view"指定"viewBox"屬性以后,SVG會根據(jù)當前的用戶坐標系統(tǒng)進行變換,去創(chuàng)建新的用戶坐標系,并作用于當前的對象以及它的子對象。該對象中指定的坐標和長度的單位不再是1:1的對應到外圍的坐標系,而是隨著變形,轉(zhuǎn)換到新的用戶坐標系中;這個新的用戶坐標系是只作用于當前的元素及其子元素。

變換鏈
transform屬性支持設(shè)置多個變換,這些變換只要中間用空格分開,然后一起放到屬性中就可以了。執(zhí)行效果跟按順序獨立執(zhí)行這些變換是一樣的。

復制代碼
代碼如下:

<g transform="translate(-10,-20) scale(2) rotate(45) translate(5,10)">
<!-- graphics elements go here -->
</g>

上面的效果與下面的一樣:

復制代碼
代碼如下:

<g transform="translate(-10,-20)">
<g transform="scale(2)">
<g transform="rotate(45)">
<g transform="translate(5,10)">
<!-- graphics elements go here -->
</g>
</g>
</g>
</g>

單位
最后說一下單位,任何坐標和長度都可以帶和不帶單位。
不帶單位的情況

不帶單位的值被認為帶的是"用戶單位",就是當前用戶坐標系的單位值。
帶單位的情況

svg中相關(guān)單位與CSS中是一樣的:em,ex,px,pt,pc,cm,mm和in。長度還可以使用"%"。
相對度量單位:em和ex也與CSS中一樣,是相對于當前字體的font-size和x-height來說的。
絕對度量單位:一個px是等于一個"用戶單位"的,也就是"5px"與"5"是一樣的。但是一個px是不是對應一個像素,那就看有沒有進行過一些變換了。
其他的幾個單位基本都是px的倍數(shù):1pt=1.25px,1pc=15px,1mm=3.543307px,1cm=35.43307px,1in=90px。

如果最外層的SVG元素的width和height沒有指定單位(也就是"用戶單位"),則這些值會被認為單位是px。

這一篇比較拗口,其實只要記住“圖形元素的坐標和長度指的是,經(jīng)過視窗坐標系變換和用戶坐標系變換雙重變換后,新用戶坐標系的坐標和長度”就可以了

實用參考:
腳本索引:http://msdn.microsoft.com/zh-cn/library/ff971910(v=vs.85).aspx
開發(fā)中心:https://developer.mozilla.org/en/SVG
熱門參考:http://www.chinasvg.com/
官方文檔:http://www.w3.org/TR/SVG11/

標簽:阿克蘇 鄂爾多斯 蚌埠 松原 常德 果洛 廣西 廣東

巨人網(wǎng)絡(luò)通訊聲明:本文標題《HTML5之SVG 2D入門6—視窗坐標系與用戶坐標系及變換概述》,本文關(guān)鍵詞  HTML5,之,SVG,入門,視窗,坐標系,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《HTML5之SVG 2D入門6—視窗坐標系與用戶坐標系及變換概述》相關(guān)的同類信息!
  • 本頁收集關(guān)于HTML5之SVG 2D入門6—視窗坐標系與用戶坐標系及變換概述的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产精品一二三在| 国产精品毛片久久久久久久| 亚洲国产成人tv| 色久综合一二码| 亚洲一区二区四区蜜桃| 欧美在线观看一区| 五月婷婷另类国产| 欧美不卡激情三级在线观看| 韩国欧美一区二区| 自拍偷在线精品自拍偷无码专区| av影院午夜一区| 亚洲国产精品久久久男人的天堂| 91精品国产综合久久婷婷香蕉| 精品一区二区三区久久久| 国产午夜精品久久久久久久| 91美女精品福利| 五月婷婷久久丁香| 国产欧美日韩在线看| 91小视频免费看| 亚洲成人av在线电影| 久久久久久久免费视频了| 91尤物视频在线观看| 秋霞av亚洲一区二区三| 国产日韩成人精品| 欧美午夜精品电影| 国产原创一区二区三区| 亚洲乱码日产精品bd| 日韩一级二级三级精品视频| hitomi一区二区三区精品| 日韩国产欧美在线播放| 国产日韩精品一区| 7777精品伊人久久久大香线蕉经典版下载 | 欧美精品色综合| 国产乱国产乱300精品| 亚洲一区在线视频观看| 国产亚洲成av人在线观看导航| 色先锋aa成人| 国产精品一区二区91| 五月天亚洲精品| 综合电影一区二区三区| 精品国产一区二区精华| 97久久久精品综合88久久| 日本少妇一区二区| 亚洲日本成人在线观看| 久久婷婷色综合| 欧美日韩久久一区| 91亚洲国产成人精品一区二三 | 日韩欧美成人一区| 91女人视频在线观看| 国产精品资源网站| 日韩av中文在线观看| 亚洲老妇xxxxxx| 国产精品久久久久久久蜜臀| 精品久久久网站| 欧美欧美欧美欧美首页| 91麻豆福利精品推荐| 国产成人av一区二区三区在线观看| 秋霞午夜鲁丝一区二区老狼| 亚洲香肠在线观看| 亚洲欧美另类小说| 国产精品全国免费观看高清 | 久久久久久久综合色一本| 91精品在线麻豆| 欧美性猛交xxxx黑人交| 色婷婷精品大视频在线蜜桃视频| 成人激情校园春色| 成人综合婷婷国产精品久久蜜臀| 国产在线视频一区二区三区| 美女视频一区二区三区| 视频一区国产视频| 天天操天天综合网| 日日嗨av一区二区三区四区| 亚洲成a人片综合在线| 亚洲成av人片在线| 视频一区在线播放| 日本不卡在线视频| 毛片av一区二区三区| 日本欧美在线观看| 久久精品国产澳门| 激情六月婷婷综合| 国产成人免费视| 成人av网站在线观看免费| 成人综合在线网站| 99re热视频精品| 91传媒视频在线播放| 在线免费不卡电影| 欧美日韩国产免费| 欧美一级免费大片| 日韩欧美一区二区免费| 久久久综合网站| 国产精品高潮呻吟| 亚洲综合无码一区二区| 石原莉奈在线亚洲三区| 精品一区二区免费看| 国产伦精一区二区三区| 成人午夜电影小说| 色88888久久久久久影院按摩 | 欧美日产国产精品| 精品剧情在线观看| 欧美精彩视频一区二区三区| 中文字幕一区二区三区在线观看| 亚洲激情图片qvod| 日韩极品在线观看| 国产黄人亚洲片| 日本黄色一区二区| 欧美大片在线观看| 欧美激情一区二区三区四区| 亚洲三级理论片| 日日噜噜夜夜狠狠视频欧美人| 国产在线精品一区在线观看麻豆| 成人福利视频在线看| 欧美性猛片aaaaaaa做受| 久久综合一区二区| 亚洲精品乱码久久久久| 精品中文字幕一区二区小辣椒| 国产成人精品免费一区二区| 欧美在线制服丝袜| 久久一区二区三区四区| 亚洲欧美欧美一区二区三区| 免费看日韩a级影片| av亚洲产国偷v产偷v自拍| 欧美妇女性影城| 国产精品乱人伦| 青青草精品视频| 国产成都精品91一区二区三| 欧美伊人精品成人久久综合97| 精品国精品国产尤物美女| 亚洲人妖av一区二区| 精品在线免费观看| 欧美性色欧美a在线播放| 国产农村妇女毛片精品久久麻豆| 亚洲chinese男男1069| 成人黄色一级视频| 久久先锋资源网| 天堂精品中文字幕在线| 91视频在线观看| 久久久激情视频| 日韩1区2区3区| 在线看国产日韩| 中文字幕欧美国产| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲综合精品自拍| 粉嫩一区二区三区性色av| 欧美日韩成人一区二区| 亚洲欧美自拍偷拍色图| 国内外成人在线| 欧美一区二区免费视频| 一区二区三区不卡在线观看| www.欧美.com| 久久精品欧美一区二区三区麻豆| 免费的成人av| 欧美一区二区免费| 日韩国产在线一| 欧美日韩视频在线第一区 | 亚洲日本免费电影| 成人黄色国产精品网站大全在线免费观看| 3d动漫精品啪啪一区二区竹菊| 一区二区三区资源| 99re这里只有精品首页| 亚洲欧美综合网| 91丝袜美女网| 亚洲欧美aⅴ...| 色拍拍在线精品视频8848| 亚洲欧美另类久久久精品| 国产成人欧美日韩在线电影| 久久久久国产精品人| 国产乱子伦一区二区三区国色天香| 日韩欧美中文字幕一区| 波多野结衣精品在线| 久久久久久亚洲综合影院红桃 | 韩国一区二区视频| 精品国产乱码久久久久久图片| 免费一级片91| 26uuu久久综合| 国产精品一区不卡| 欧洲生活片亚洲生活在线观看| 精品国产乱码久久| 午夜精品久久久久久久99水蜜桃 | 国产精品全国免费观看高清 | 另类小说视频一区二区| 日韩久久免费av| 精品一区二区在线视频| 国产亚洲精品福利| 成人国产精品视频| 亚洲乱码精品一二三四区日韩在线| 91网上在线视频| 亚洲图片自拍偷拍| 日韩一二三四区| 国产成人福利片| 亚洲精品videosex极品| 3d成人动漫网站| 国产又黄又大久久| 亚洲欧美国产77777| 欧美日韩国产综合视频在线观看| 麻豆精品新av中文字幕| 国产精品午夜免费| 欧美日韩国产天堂| 国产伦精品一区二区三区视频青涩 | 91网站黄www| 日韩在线一区二区|