用canvas 实现矩形的移动(点、线、面)(1)

用canvas 实现矩形的移动(点、线、面)(1)

这是我参与更文应战的第7天,活动概况查看: 更文应战

前语

在canvas中完毕图片移动、完毕矩形移动,咱们或许看的很多了。可是我为什么还要去写这样的一篇文章呢,由于笔者早年做到3elementanimation维图形下的移动。包括移动elelements翻译ement滑板一个立方矩阵相乘怎样算体上的一条边线、一个面、移动多边形的一个矩阵计算器点。最近一向变量名的命矩阵相乘怎样算名规矩在写canvas的相关的文章,想着温矩阵的秩习下,读完本篇文章Element你可以学到,经github中文社区过移动矩形的一个点, 一个条边变量类型有哪些线github打不开,以及整个面的移动。Element本篇文章从elements浅到深,期望你耐性读下去。

面的移动

试想一下,在canvas 下完毕移动矩阵的迹功用。榜首步必定创立canvasgithub直播途径永久回家 并对canvas 添加move 作业, 这样咱们实变量类型有哪些时获取到咱们鼠标的变量是什么意思方位,然后咱们github只需elementsElement要不断的铲除画布,然eelementuilement形容词后从头画矩形。就OK了,面的element是什么牌子移动开端完毕。我Git在下面写点的移动会把这儿重Element写了, 这儿先写个快速简易版其他。

const canvaelement形容词s = document.getElementB矩阵相乘怎样算yId('canvas');
const c矩阵的秩tx = canvas.getContext('2d');
const width = 100;
cons变量值t height = 100;
drawRect();
function drawRect(x = 10,y = 1giti0, scale = 1) {
ctx.clearRect(github是干什么的 0, 0, 1800,element形容词 800 );
const halfwi矩阵的秩dth =gitlab width * scale / 2;
const halfheight = height * s矩阵计算器cale / 2;
ctx.stro变量泵keRect(x - halfwidth, y - halfheight,width * scale, height * scale)
}
let isMove =  true;
canvas.addEventLisgithub是干什么的tener('mougithubsemove',(e)=>{
if(!isMove) {
return
}
const x =矩阵相似 e.clientX;
const y = e.clientY;
draw矩阵的逆Rect(x,y)
})
canvas.github永久回家地址addEventgithubListegithub永久回家地址ner('click',(e)=> {
isMove = !isMove;
});

isMove变量便是elementary是什么意思个开关,咱们总不能一向移变量动吧,那也太累了,github官网鼠标点击变量名的命名规矩的就暂停。 关于上文为什么要变量与函数x – hagitilfwidth, y – halfhelement什么意思eightgithub是干什么的

这儿和咱们解说下: strokeRect 是从矩形的左上角开端画的,可是呢我想把矩形放在鼠标中心方位, 所以做一个宽度和高度相减就可以完美展现了。

点的变量类型有哪些移动

首要榜首Git个问题就矩阵相乘怎样算是? 咱们怎样知github打不开道咱们挑选的是哪一矩阵相乘怎样算个点呢,矩阵相乘怎样算这儿我做了一个简略的判别便是通过判别鼠github中文官网网页标点击的变量英文方位和矩形的每个点的方位作比较,看看哪一个离得近就作为目标点。由于咱们2d其实github中文官网网页点的移动其实也便是找Element这个点相变量是什么意思关的线段, 所以咱们只需要从头生成相关的线段就好变量的指针其意义是指该变量的elements翻译,可是github永久回家地址githuelementanimationb直播途径永久回家这儿有一个比较难以处矩阵游戏理的当地? 便是移gitlab动一个半圆? 假定咱们移动半圆的断点, 这儿就涉及到圆弧的改动了,或许变成椭圆弧或者说用二阶、三阶贝塞尔曲线去表达。还有便是移动一个图形和画布上其他图形构github打不开成了切矩阵相乘怎样算开? 是不是也要切element形容词开算法?其实可以用Clipper去求交并差,感兴趣的同学可以自行去了解一下,可是这些不在本篇文章所想要论说中。 本篇文章全部的比如(只支撑直线也便是LielementsneSegment)。

OK,咱们榜首变量步咱们得去从头表达矩形,由于GitHub他不可通矩阵的秩用精确的是从头表达四边形, 矩形和正方形只是其间的特变量名列。这儿我给出原因? 为什么呢一个很gitlab简答的case,github中文官网网页移动四边形的一个点,他或许变成下面这github敞开私库样:

用canvas 结束矩形的移动(点、线、面)(1)

ok 为了下面好表达咱们新建一个Pgithub是干什么的oint2d这个gitee类, 将画布上的每一github是干什么的个点giti轮胎都用一个实例去标明。

class Point2d {
constructor(x,y) {
this.x = x || 0;
this.y变量泵 = y || 0;
}
clone() {
regithub下载turn this.constructor(this.x, this.elementsy);
}
add(v) {
thisgithub中文社区.x += v.xgithub怎样下载文件;
this.y += v.y
return this;
}
random() {
this.x = Math.random() *1800;
tgit教程hielement什么意思s.github官网y = Math.random() * 800;
return this
}
}github直播渠道永久回家

接下来咱们就随便在画布上git命令一鼠标的方位别离加上矩形的长度和宽度,画出矩形。 代码如下:

function drawF变量的指针其意义是指该变量的ourPolygon(x, y ,width = 50, height = 5矩阵的逆0) {
ctx.cleaelementsrGitRec矩阵等价t( 0, 0, 1800, 800 );
ctx.beginPathgithub永久回家地址();
ctx.moveTo(x- width /2, y - height/2)
ctx.lineTo(x+ width / 2, y -heielement滑板ght/2 )
ctx.lineTo(x+ width / 2, y + height/2 )
ctx.lineTo(x - width / 2, y + height/2 )
ctx.c矩阵乘element什么意思losePagithub下载th()
ctx.st变量与函数roke()
}

为了giti交互更加完美, 鼠标榜首次点击供认移动的开端点, 然后 鼠标不断地移动便是移动的停止点, 这样就供认了一个向量。 这儿为了移动的时分更加显着github敞开私库我添加了虚线功用,代码如下

functioelementary是什么意变量值github官网n drawDashLine(start, end) {
if (!start || !end) {
return
}
ctx.strokeStyle = 'red'矩阵游戏;
ctx.setLineDashgithub怎样下载文件( [5element滑板, 10] );
ctx.beginPath();
ctx.moveTo( start.x, start.y );
ctx.linelement滑板eTo( end变量值.x, end.y );
ctx.closePath()
ctx.github直播途径永久回家stroke();
}

这儿用变量与函数到的便是canvas setLineDGit变量名Hubash 这个api 参数的意义,实线的距离5、空矩阵的迹白的距离10 如此矩阵的乘法运算往复的走下去构成虚线。start和end 便是鼠标点击供认的便是start 点, 然后鼠标不断的移动便是end点element滑板。 这儿有一个gitee小提示便是我鼠标移动的过程中先画了虚线,然后又画了矩形所以呢? 矩形咱们仍是实线。咱们这儿矩阵天王对画矩形代码做了修改eelement滑板lements,仍是把虚线恢elementary是什么意思复过来。

代码如下:

 ctx.s变量类型有哪些etLineDash([elementanimation]);矩阵的逆

OK全体的交互出来了,我先给咱们看github打不开下作用:

是不是有点感觉了哈哈elementanimation哈?从画面上看这仍是全体的移动不是点矩阵的秩的移giti动, 由于我画的图矩阵计算器形以鼠标点击的那个点去画矩形的,我的下一篇文章会给咱们介绍不矩阵相乘怎样算规矩多边形github直播渠道永久回家点的变量是什么意思移动,本篇文章咱们仍github中文官网网页是假定我移动的是右上角的那个点。OK咱们由移动的开端点和完毕点, 可以得到一个移动的向量, 所以我矩阵游戏们只需即将移动的点 和这个向量相加。这样咱们是不是完毕了点的移动。

 const moveV变量之间的联系ec = end.clone().sub(start);
const rightTop = new Point2d(x+矩阵乘法 width变量之间的联系 / 2, y - height/2).clone()变量名的命名规矩.add(moveVec)

这儿我改动了右上角的点,element滑板可是呢有一个Element问题便是咱们github中文官网网页矩阵的迹点击也是走的同一个函数,所以矩阵咱们得加个开关去判别下,首要是用来判读是榜首次点击github打不开仍是移动就好了代码如下:

ctx.lineTo(isSelecElementt ? rig矩阵htTop.x : x+ widtelement是什么牌子h / 2, isSelect ? rightTop.y : y height/2)
// 看下click和move 作业 开关便是igithub是干什么的变量的界说sSelect这个变量
canvas.addEventList变量泵ener('mousemove',(e)=>{
if(!isMove) {
return
}
const x = e.cl变量名的命名规矩ientX;
const y = e.github中文社区clientYgithub打不开;
clearRect();
end = new Point2d(x,y);
drawDashLine(start,end);
drawFourPolygon(start)
})
canvas.addEve矩阵的秩ntListener('矩阵的逆click',(e)=> {
// 这是github下载一个每次铲除画布的函数
clearRect()
isMove = !isMove;
const x = e.clientX;
constelements y = e.clientYgithub是干什么的;
start  = new Point2d(x,y);
drawFourPolygon(start)
isSelect = true;
});

作用图如下:

用canvas 结束矩形的移动(点、线、面)(1)

哈哈哈是不是矩阵类似非常github打不开的丝滑和流转, 发现canvas 的画图的功用仍是Git非常不错的。可是仍是有一个问题便是,承github直播途径永久回家认作用,看上面代码咱们供认作用是有问题elementary是什么意思的。 所以我以按住alt键结矩阵天王束为承变量类型有哪些认作用这就非常完美了,代码就不在这儿展现了。

线的移动

有了点的移动,线的移动就显变量的指针其意义是指该变量的现的十变量名的命名规矩分简略。 线的移动其实便是对应的点github敞开私库的移动。 咱们以右边这条线为比如: 代码改写如下:

function drawFourPolygon( point, width = 50, height = 50) {
if(!point)git指令 {
retgithub是干什么的urn变量英文
}
ctx.strokeStyle = 'black'
ctx.setLineDash([]);
ctx变量名的命名规矩.beginPath(gitlab);
const { x, y } = po矩阵的迹int;
cgithgithub怎样下载文件ub中文官网网页onst moveVec = end.clone().sub(start);
// 其实便是 右上和右下这两个点一同移github中文社区
const r矩阵ightTop =elements翻译 new Point2d(x+ widgithub打不开th / 2, y矩阵的迹 - height/2).clone().add(moveVe矩阵的迹c)
const rightBottom = new Point2d变量的指针其意义是指该变量的(xgiti轮胎+ width / 2, y + he矩阵乘法ight/2).clone().add(moveVec)
ctgithub中文官网网elements翻译x.moveTo(x- width /2elegit教程ment什么意思, y - height/2)
ctx.lineTo(isSelect ? rightTop.x : x+ width / 2, isSelect ?element什么意思 rightTop.y : y - heightelementanimation/2)
ctx.lineTo(isSelect ? relement滑板ightBelement滑板ottom矩阵变量名.x : x+ width / 2, isSelect ? rightBottom.y : y + height/2)
ctx.lineTo(x - width矩阵的迹 / 2变量与函element形容词, y + height/2 )
ctx.closePath()
ctx.stroke()
}

咱们看下作用图elemenElementt滑板

用canvas 结束矩形的移动(点、线、面)(1)

总结

本篇文章首要介绍elements的2d图形下最基本的改动移动,无论是线的移动仍是面的移矩阵的逆动终element形容词究都是点的移动。其实移动除了用向量标明还可以用矩阵, 或者说咱们旋转移动缩element什么意思放等等指令都可以用矩github中文官网网页阵改矩阵相乘怎样算动标明。 究竟仍是感谢咱们看到究竟,码字不github打开私库简单,假定看了对你有帮忙的, 欢迎elements点个变量的界说赞和重视。 你的支撑是我持续更新好文章的最大动力。 全部代码都在我的github上。欢迎咱们star。

评论

发表回复