html - 如何在画布上绘制负 x 和 y 值
问题描述
画布的起点是左上角,即 x,y(0,0)。我可以在画布上绘制正值。
下面是我的示例代码
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.moveTo(0,0);
ctx.lineTo(200,100);
ctx.stroke();
</script>
但如果 x 和 y 的值为负,我无法绘制 x 和 y。下面的代码不起作用
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.moveTo(0,0);
ctx.lineTo(-200,-100);
ctx.stroke();
</script>
我想在画布上绘制负值。这可能吗?
这就是我要的
解决方案
ctx.translate
您可以使用、ctx.transform
或将原点 (0,0) 定位在您喜欢的任何位置ctx.setTransform
。
ctx.translate
,ctx.transform
是相对于当前变换的。ctx.setTransform
是绝对的。
我发现最简单的方法是使用ctx.setTransform
const W = ctx.canvas.width, H = ctx.canvas.height;
ctx.setTransform(1,0,0,1,0,0); // resets the transform to clear
ctx.clearRect(0,0,W,H); // clears the canvas
ctx.setTransform(1, 0, 0, 1, W / 2, H / 2); // moves the origin to the center of
// the canvas
ctx.strokeRect(-200,-200, 190, 190);
的 6 个参数setTransform
是。
- first 2 描述渲染像素顶部边缘的向量。X 轴
x : 1, y : 0
- second 2 描述渲染像素左边缘的向量。Y 轴
x : 0, y : 1
- last 2 在画布像素中的位置,位于渲染像素 0,0 的左上角
因此,您可以通过更改前四个来扩展
ctx.setTransform(2, 0, 0, 2, W / 2, H / 2); // zooms in by 2 with origin at center
ctx.setTransform(0.5, 0, 0, 0.5, W / 2, H / 2); // zooms out by 2 with origin at center
推荐阅读
- java - 使用 FileStreamSink 连接器将 Kafka 数据写入二进制文件
- javascript - 失败后如何在 cypress.io 中记录元素的文本
- node.js - 在查询中搜索对象数组
- node.js - 在 Linux 环境的 Azure 函数 (node.js) 的控制台中运行 npm install 会出错
- java - 如何使用列表视图滚动所有布局
- javascript - javascript已连接,但innerhtml不更新
- java - 当我尝试将数据库值保存在 ArrayList 中时,键入 Mismatch。如何避免?
- azure - 从 Azure 迁移到 Google 云服务时的问题
- material-ui - 在 Material-UI 工具提示中包装 DatePicker 失败并出现 ForwardRef(Tooltip) 错误
- android-studio - 如何检索 Keystore 的别名和存储密码?