日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

canvas笔记-图形变换(位移translate、缩放scale、变换矩阵transform)

發(fā)布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 canvas笔记-图形变换(位移translate、缩放scale、变换矩阵transform) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這里首先演示下位移,這里使用的函數(shù)是translate(x,?y)這個函數(shù)是疊加的,也就是說,當translate(100,?100),后再次調(diào)用translate(200,?200),那么最后圓點的基準值就為translate(300,?300)。

也就是說如果要實現(xiàn)某個圖形的位移后,還要變回來。

代碼如下:

translate(100, 100); //TODO ... ... translate(-100, -100);

或者使用如下的方式:

save(); //保存當前圖形狀態(tài) Restore(); //返回save前的狀態(tài)

程序運行截圖如下:

代碼如下:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><canvas id="canvas" style="border: 1px solid #aaa; display: block; margin: 50px auto;">當前瀏覽器不支持canvas </canvas><script>window.onload = function(){let canvas = document.getElementById("canvas");canvas.width = 800;canvas.height = 800;let context = canvas.getContext("2d");context.fillStyle = "red";context.fillRect(0, 0, 400, 400);context.fillStyle = "blue";context.translate(100, 100);context.fillRect(0, 0, 400, 400);context.fillStyle = "green";context.translate(300, 300);context.fillRect(0, 0, 400, 400);}</script></body> </html>

?

使用save()及restore()

程序運行截圖如下:

源碼如下:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><canvas id="canvas" style="border: 1px solid #aaa; display: block; margin: 50px auto;">當前瀏覽器不支持canvas </canvas><script>window.onload = function(){let canvas = document.getElementById("canvas");canvas.width = 800;canvas.height = 800;let context = canvas.getContext("2d");context.fillStyle = "red";context.fillRect(0, 0, 400, 400);context.save();context.fillStyle = "blue";context.translate(100, 100);context.fillRect(0, 0, 400, 400);context.restore();context.save();context.fillStyle = "green";context.translate(300, 300);context.fillRect(0, 0, 400, 400);context.restore();}</script></body> </html>

?

下面是關(guān)于scale,這里scale會把坐標,線條邊框都擴大了,如下圖:

源碼如下:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><canvas id="canvas" style="border: 1px solid #aaa; display: block; margin: 50px auto;">當前瀏覽器不支持canvas </canvas><script>window.onload = function(){let canvas = document.getElementById("canvas");canvas.width = 800;canvas.height = 800;let context = canvas.getContext("2d");context.save();context.scale(1, 1);context.strokeRect(50, 50, 200, 200);context.restore();context.save();context.scale(2, 2);context.strokeRect(50, 50, 200, 200);context.restore();context.save();context.scale(3, 3);context.strokeRect(50, 50, 200, 200);context.restore();}</script></body> </html>

下面是關(guān)于變換矩陣transform。

這里有個基本概念:二維圖像變換矩陣為3*3,三維圖像變換矩陣為?4*4

關(guān)于二維圖像變換矩陣為:

[

a?c?e

b?d?f

0?0?1

]

?

a表示水平縮放,默認值為1;

b表示水平傾斜,默認值為0;

c表示垂直傾斜,默認值為0;

d表示垂直縮放,默認值為1;

e表示水平位移,默認值為0;

f表示垂直位移,默認值為0。

?

從中可知,默認情況下變換矩陣為單位矩陣

[

1?0?0

0?1?0

0?0?1

]

如下使用單位矩陣變換的例子:

源碼如下:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><canvas id="canvas" style="border: 1px solid #aaa; display: block; margin: 50px auto;">當前瀏覽器不支持canvas </canvas><script>window.onload = function(){let canvas = document.getElementById("canvas");canvas.width = 800;canvas.height = 800;let context = canvas.getContext("2d");context.fillStyle = "red";context.strokeStyle = "#058";context.lineWidth = 5;context.save();context.transform(1, 0, 0, 1, 0, 0);context.fillRect(50, 50, 300, 300);context.strokeRect(50, 50, 300, 300);context.restore();}</script></body> </html>

?

下面開始進行變換,程序運行截圖如下:

源碼如下:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><canvas id="canvas" style="border: 1px solid #aaa; display: block; margin: 50px auto;">當前瀏覽器不支持canvas </canvas><script>window.onload = function(){let canvas = document.getElementById("canvas");canvas.width = 800;canvas.height = 800;let context = canvas.getContext("2d");context.fillStyle = "red";context.strokeStyle = "#058";context.lineWidth = 5;context.save();context.transform(1, 1, 0, 1, 0, 0);context.fillRect(50, 50, 300, 300);context.strokeRect(50, 50, 300, 300);context.restore();}</script></body> </html>

同樣這給transform也是疊加的,使用setTransform是把之前的變換都設(shè)置為單位矩陣,然后再進行縮放。

總結(jié)

以上是生活随笔為你收集整理的canvas笔记-图形变换(位移translate、缩放scale、变换矩阵transform)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕淫 | 国产色啪| 波多野结衣激情视频 | 欧美成年人在线观看 | 久久亚洲一区 | 丁香五香天堂 | 久久久久一 | 亚洲AV不卡无码一区二区三区 | 成人在线免费看 | 激情三区| 国产成人麻豆精品午夜在线 | 久久久久久国产精品三级玉女聊斋 | 思思久久精品 | 99re99| 椎名空在线 | 黑巨茎大战欧美白妞 | 懂色一区二区 | 欧美在线观看不卡 | 色婷婷综合久久久久中文一区二区 | 国产伦精品一区二区三区妓女 | 黄色录像二级片 | 亚洲av片一区二区三区 | 无码人妻丰满熟妇区96 | 欧美亚洲影院 | 亚洲永久视频 | 精品动漫一区二区三区在线观看 | 欧美日韩一区二区在线 | 69re视频| 人妻互换一二三区激情视频 | 亚洲高清视频免费观看 | 国产极品一区 | 国产免费黄色 | 丁香花电影免费播放在线观看 | 亚洲涩情 | 天天av综合 | 亚洲2022国产成人精品无码区 | 少妇第一次交换又紧又爽 | 巨乳动漫美女 | 91玉足脚交白嫩脚丫 | 一个色综合久久 | 日日夜夜精 | 国产精品一区二区三区在线播放 | 男人私人影院 | 日本成人在线网站 | 91爱| 善良的女朋友在线观看 | 性视频播放免费视频 | 新红楼梦2005锦江版高清在线观看 | 潮喷失禁大喷水无码 | av中文在线播放 | 国产伦理一区 | 五月婷婷激情网 | 欧美精品色婷婷五月综合 | www欧美色 | 精品久久国产 | 婷婷综合在线观看 | 久久久久久久久97 | 久久天天躁狠狠躁夜夜av | 99久久免费国产精精品 | 久久91亚洲人成电影网站 | 亚洲av无码一区二区三区dv | 亚洲成人av影片 | 在线观看污污网站 | 国产一区二区视频在线播放 | 国产成人亚洲欧洲在线 | 99久久久无码国产精品性 | 狠狠干综合 | 国产精品不卡视频 | 欧美xxxxav | 美日韩精品一区二区 | 久久国产福利 | 很黄很污的视频网站 | 在线午夜av | 精品国产免费人成在线观看 | 在线观看日本 | 99ri在线| 色婷婷国产 | 亚洲国产日韩在线一区 | 婷婷第四色 | 欧美va亚洲va | 99re在线视频观看 | 清纯唯美亚洲激情 | 先锋资源一区二区 | 国产精品熟妇一区二区三区四区 | 欧美日韩另类一区 | 免费看国产片在线观看 | 欧美色插 | 日韩精品一区二区三区不卡在线 | 亚洲国产片 | 日韩av在线网址 | 国产成人精品一区二区三区视频 | 日韩视频在线一区 | 99热97| 欧美一区二区三区视频在线 | 鲁鲁狠狠狠7777一区二区 | av久久久久久| 中文字幕第一页在线 | 亚色中文字幕 | 亚洲午夜精品一区二区 |