【发布时间】:2022-01-04 21:57:57
【问题描述】:
我需要在绘制形状之前应用几个矩阵变换,但是(如果在某处)我使用 rotate() 坐标被反转和/或反转,并且在不知道矩阵先前是否旋转的情况下无法继续。
如何解决这个问题?
示例:
<canvas width="300" height="300"></canvas>
<script>
let canvas = document.querySelector("canvas");
let ctx = canvas.getContext("2d");
ctx.fillStyle = "silver";
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.strokeStyle = "black";
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(0, canvas.height/2);
ctx.lineTo(canvas.width, canvas.height/2);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(canvas.width/2, 0);
ctx.lineTo(canvas.width/2, canvas.height);
ctx.stroke();
ctx.translate(150, 150);
ctx.rotate(-90 * 0.017453292519943295);
ctx.translate(-150, -150);
// move the red rectangle 100px to the left (top-left)
// but instead is moved on y axis (right-bottom)
ctx.translate(-100, 0);
// more matrix transformations
// ....
// ....
// now finally draw the shape
ctx.fillStyle = "red";
ctx.fillRect(150, 150, 100, 50);
</script>
这可以是Translation after rotation 的解决方案吗?
【问题讨论】:
-
先重置你的变换矩阵?
-
我正在构建一个UI,红色矩形属于一个灰色矩形,这个灰色矩形也属于另一个一个(假设是一个白色矩形),如果我需要平移灰色矩形或旋转白色矩形,我必须堆叠所有的转换,所以红色矩形 绘制正确。也许应该发布一个复杂的例子来更好地理解它。
-
记得put the details in your post。不在评论中。
-
又是一个例子,你没看懂第一个(关于问题)
-
是的,那应该是in your post,并提供更多指导文字:当人们要求澄清或更多细节,或发表评论让您认为有人误解了您的帖子时,这是一个信号您的帖子需要更多信息(然后您可以发表评论回复“我已更新帖子以解释这一点”或类似内容)因为 cmets 不是开始一对一的,他们是要求将您的帖子更新为足够完整的内容,以至于人们不会需要发布额外的 cmets,因为它已经非常清楚了。