亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

HTML5 Canvas實現平移/放縮/旋轉deom示例(附截圖)

2024-08-26 00:16:17
字體:
來源:轉載
供稿:網友

點評:HTML5 Canvas中提供了實現圖形API,通過它可以簡單的實現平移,旋轉,放縮等等,下面與大家分享下平移,旋轉,放縮的具體實現及參照圖,感興趣的朋友可以參考下哈,希望對大家有所幫助

HTML5 Canvas中提供了實現圖形平移,旋轉,放縮的API。
平移(translate)
平移坐標translate(x, y)意思是把(0,0)坐標平移到(x, y),原來的(0,0)坐標則變成(-x, -y)
圖示如下:

HTML5 Canvas實現平移/放縮/旋轉deom示例(附截圖)

 
任何原來的坐標點p(ox, oy)在translate之后的坐標點為p(ox-x, oy-y),其中點(x, y)為平移
點坐標translate(x, y)。
代碼演示:

復制代碼

代碼如下:


// translate is move the startpoint to centera and back to top left corner
function renderText(width, height, context) {
context.translate(width/ 2, height / 2); // 中心點坐標為(0, 0)
context.font="18px Arial";
context.fillStyle="blue";
context.fillText("Please Press <Esc> to Exit Game",5,50);
context.translate(-width/2, -height/2); // 平移恢復(0,0)坐標為左上角
context.fillText("I'm Back to Top",5,50);
}


放縮(Scale)
Scale(a, b)意思是將對象沿著XY軸分別放縮至a*x, b*y大小。效果如圖示:

HTML5 Canvas實現平移/放縮/旋轉deom示例(附截圖)

 

復制代碼

代碼如下:


// translation the rectangle.
function drawPath(context) {
context.translate(200,200);
context.scale(2,2);// Scale twice size of original shape
context.strokeStyle= "green";
context.beginPath();
context.moveTo(0,40);
context.lineTo(80,40);
context.lineTo(40,80);
context.closePath();
context.stroke();
}


旋轉(rotate)
旋轉角度rotate(Math.PI/8)

HTML5 Canvas實現平移/放縮/旋轉deom示例(附截圖)

 
旋轉前的坐標p(x, y)在對應的旋轉后的坐標P(rx, ry)為
Rx = x * cos(-angle) - y * sin(-angle);
Ry = y * cos(-angle) + x * sin(-angle);
旋轉90度可以簡化為:
Rx = y;
Ry = -x;
Canvas中旋轉默認的方向為順時針方向。演示代碼如下:

復制代碼

代碼如下:


// new point.x = x * cos(-angle) -y * sin(-angle),
// new point.y = y * cos(-angle) +x * sin(-angle)
function renderRotateText(context) {
context.font="24px Arial";
context.fillStyle="red";
context.fillText("i'm here!!!",5,50);
// rotate -90 degreee
// context.rotate(-Math.PI/2);
// context.fillStyle="blue";
// context.fillText("i'm here!!!", -400,30);
// rotate 90 degreee
context.rotate(Math.PI/2);
context.fillStyle="blue";
context.fillText("i'm here!!!",350,-420);
console.log(Math.sin(Math.PI/2));
// rotae 90 degree and draw 10 lines
context.fillStyle="green";
for(var i=0; i<4; i++) {
var x = (i+1)*20;
var y = (i+1)*60;
var newX = y;
var newY = -x;
context.fillRect(newX,newY, 200, 6);
}
}


通常做法是旋轉與平移一起使用,先將坐標(0,0)平移到中心位置
translate (width/2, height/2)然后再使用rotate(Math.PI/2)完成旋轉
代碼示例如下:

復制代碼

代碼如下:


function saveAndRestoreContext(context) {
context.save();
context.translate(200,200);
context.rotate(Math.PI/2);
context.fillStyle="black";
context.fillText("2D Context Rotate And Translate", 10, 10);
context.restore();
context.fillText("2D Context Rotate And Translate", 10, 10);
}


全部JavaScript代碼:

復制代碼

代碼如下:


var tempContext = null; // global variable 2d context
window.onload = function() {
var canvas = document.getElementById("target");
canvas.width = 450;
canvas.height = 450;
if (!canvas.getContext) {
console.log("Canvas not supported. Please install a HTML5 compatible browser.");
return;
}
// get 2D context of canvas and draw image
tempContext = canvas.getContext("2d");
// renderText(canvas.width, canvas.height, tempContext);
saveAndRestoreContext(tempContext);
// drawPath(tempContext);
}
// translate is move the start point to centera and back to top left corner
function renderText(width, height, context) {
context.translate(width / 2, height / 2);
context.font="18px Arial";
context.fillStyle="blue";
context.fillText("Please Press <Esc> to Exit Game",5,50);
context.translate(-width / 2, -height / 2);
context.fillText("I'm Back to Top",5,50);
}
// translation the rectangle.
function drawPath(context) {
context.translate(200, 200);
context.scale(2,2); // Scale twice size of original shape
context.strokeStyle = "green";
context.beginPath();
context.moveTo(0, 40);
context.lineTo(80, 40);
context.lineTo(40, 80);
context.closePath();
context.stroke();
}
// new point.x = x * cos(-angle) - y * sin(-angle),
// new point.y = y * cos(-angle) + x * sin(-angle)
function renderRotateText(context) {
context.font="24px Arial";
context.fillStyle="red";
context.fillText("i'm here!!!",5,50);
// rotate -90 degreee
// context.rotate(-Math.PI/2);
// context.fillStyle="blue";
// context.fillText("i'm here!!!", -400,30);
// rotate 90 degreee
context.rotate(Math.PI/2);
context.fillStyle="blue";
context.fillText("i'm here!!!", 350,-420);
console.log(Math.sin(Math.PI/2));
// rotae 90 degree and draw 10 lines
context.fillStyle="green";
for(var i=0; i<4; i++) {
var x = (i+1)*20;
var y = (i+1)*60;
var newX = y;
var newY = -x;
context.fillRect(newX, newY, 200, 6);
}
}
function saveAndRestoreContext(context) {
context.save();
context.translate(200,200);
context.rotate(Math.PI/2);
context.fillStyle="black";
context.fillText("2D Context Rotate And Translate", 10, 10);
context.restore();
context.fillText("2D Context Rotate And Translate", 10, 10);
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美亚洲国产视频小说| 福利二区91精品bt7086| 九九久久久久99精品| 国外视频精品毛片| 亚洲欧洲日产国产网站| 亚洲专区国产精品| 国产午夜精品免费一区二区三区| 亚洲va欧美va国产综合剧情| 亚洲电影成人av99爱色| 成人亚洲欧美一区二区三区| 日韩电影中文字幕在线| 久久影视电视剧免费网站清宫辞电视| 日韩av最新在线观看| 疯狂做受xxxx欧美肥白少妇| 国产91在线播放| 日本一区二区三区四区视频| 日韩视频一区在线| 国产一区二区在线免费视频| 久热在线中文字幕色999舞| 欧美成人免费va影院高清| 亚洲最新在线视频| 国产精品福利无圣光在线一区| 成人www视频在线观看| 国产精品中文字幕在线| 日韩欧美一区二区三区久久| 久久久天堂国产精品女人| 国产精品欧美日韩一区二区| 久久青草精品视频免费观看| 亚洲xxxx18| 国模精品系列视频| 亚洲深夜福利视频| 亚洲美女性视频| 欧美激情一二区| 欧美福利视频网站| 国产精品99久久久久久久久| 国产精品av在线播放| 久久不射热爱视频精品| 国产狼人综合免费视频| 欧美裸体xxxx极品少妇软件| 国产成人午夜视频网址| 在线丨暗呦小u女国产精品| 九九热精品视频在线播放| 亚洲影院污污.| 亚洲国产欧美久久| 国产精品xxx视频| 色婷婷综合成人av| 国产女人18毛片水18精品| 在线日韩日本国产亚洲| 日韩麻豆第一页| 欧美精品在线视频观看| 欧美大秀在线观看| 亚洲性猛交xxxxwww| 国产精品一区二区av影院萌芽| 久久成人精品一区二区三区| 国产在线拍偷自揄拍精品| 日韩美女视频免费在线观看| 午夜免费在线观看精品视频| 国产亚洲精品综合一区91| 亚洲精品国产综合区久久久久久久| 136fldh精品导航福利| 欧美国产视频一区二区| 一区二区国产精品视频| 国产精品普通话| 亚洲视频axxx| 欧美区在线播放| 亚洲精品一区av在线播放| 色小说视频一区| 欧美裸体视频网站| 韩国欧美亚洲国产| 成人黄色在线免费| 日韩av日韩在线观看| 欧美另类精品xxxx孕妇| 欧美一级黑人aaaaaaa做受| 国产精品第1页| 久久免费精品日本久久中文字幕| 亚洲黄色成人网| 欧美xxxx做受欧美.88| 亚洲色图欧美制服丝袜另类第一页| 欧美在线国产精品| 日韩有码在线电影| 国产精品日韩久久久久| 亚洲aa中文字幕| 国产自产女人91一区在线观看| 亚洲综合中文字幕68页| 97精品免费视频| 日韩免费在线电影| 久久伊人色综合| 97精品久久久中文字幕免费| 亚洲乱码av中文一区二区| 久久精品99久久久香蕉| 欧美激情欧美激情在线五月| 懂色av中文一区二区三区天美| 中国china体内裑精亚洲片| 亚洲欧美日韩一区二区三区在线| 国产男女猛烈无遮挡91| 欧美日韩黄色大片| 日韩视频免费看| 97国产成人精品视频| 成人黄色影片在线| 欧美日韩国产一区二区三区| 亚洲精品美女在线观看播放| 国产精品视频精品视频| 青青a在线精品免费观看| 精品国产乱码久久久久酒店| 亚洲最大福利视频| 久久香蕉国产线看观看av| 精品国产福利视频| 国产精品扒开腿做爽爽爽的视频| 欧美成人免费大片| 色综合伊人色综合网| 精品国产视频在线| 国产精品video| 亚洲高清久久久久久| 精品亚洲一区二区三区| 亚洲第一二三四五区| 久久综合久久美利坚合众国| 国产成人av网址| 国产精品99久久久久久白浆小说| 欧美成人精品激情在线观看| 日韩在线观看精品| 不用播放器成人网| 久久人体大胆视频| 日韩影视在线观看| 狠狠色香婷婷久久亚洲精品| 精品久久在线播放| 免费不卡在线观看av| 欧洲成人免费视频| 国产精品久久久久久av福利软件| 成人亚洲欧美一区二区三区| 日韩乱码在线视频| 亚洲精品久久久久久久久久久久久| 国产精品日韩一区| 国产精国产精品| 久久久成人精品视频| 国产日韩在线播放| 国产69精品久久久久99| 久久久久久久影院| 国产一区二区日韩| 91精品久久久久| 亚洲精品电影网在线观看| 精品视频—区二区三区免费| 91网站在线看| 久久精品青青大伊人av| 92裸体在线视频网站| 国产精品视频网站| 亚洲欧美色婷婷| 日韩免费在线播放| 色婷婷**av毛片一区| 欧美亚洲免费电影| 91久久嫩草影院一区二区| 国产精品网站视频| 亚洲男人av在线| 日韩视频中文字幕| 91美女片黄在线观看游戏| 日韩中文字幕在线免费观看| 日韩性xxxx爱| 91沈先生在线观看| 国产成人精品免费久久久久| 国产欧美精品日韩| 日韩av在线资源| 欧美精品九九久久| 亚洲性猛交xxxxwww| 91精品视频专区| 国产欧美精品久久久|