gpt4 book ai didi

javascript - 在 HTML5 Canvas 上定位

转载 作者:行者123 更新时间:2023-11-30 09:52:52 25 4
gpt4 key购买 nike

我对 HTML5 Canvas 上的坐标系感到困惑。我创建了一个 500x500 的 Canvas 和 as per this answer我试图以更易于理解的笛卡尔格式来定位它。但是,我的橙色方 block 出现了意外行为。

对于 500,500 的 Canvas ,我希望 fillRect(-250,-250,100,100) 在 Canvas 的左上角有一个左上角,但它无处可去成立。出于某种原因,fillRect(150,150,100,100) 在 Canvas 的右上角有一个右上角。

我非常困惑,有人可以阐明 HTML5 Canvas 的动态吗?

drawanimation.html:

    <!DOCTYPE html>
<html>
<head>
<title>Animate Something!</title>
<link rel='stylesheet' href='drawanimation.css'></link>
<script src='drawanimation.js'></script>
</head>
<body onload = "draw();">
<canvas id="drawer" width="500" height="500"></canvas>
</body>
</html>

drawanimation.js

var width = 500;
var height = 500;

var draw = function(){

var canvas = document.getElementById('drawer');
var context = canvas.getContext('2d');
context.save();
context.clearRect(0,0,width,height);
context.translate(width/2,height/2); //cartesian attempt
//context.rotate(-Math.PI/2); //spin this thing until it's oriented right!
context.fillStyle = 'orange';
context.fillRect(150, 150 ,100,100);
context.restore();
};

最佳答案

笛卡尔坐标系没有定义轴的方向。

计算机图形采用的标准是以左上角为原点,X 轴从左到右从上到下,Y 轴从上到下向下。

这通常是因为在过去的日子里,显示内存的索引与 CRT 扫描线顺序匹配,第一个字节在最低地址读取。

尽管这不适用于现代计算机,因为所有渲染调用都首先进行了转换。您可以根据需要设置原点,也可以根据需要设置轴的方向。

如果您希望 y 轴从左下角向上,x 轴从左下角穿过右下角,则将变换设置为 ctx.setTransform(1,0,0,-1,0,499)

前两个数字是X轴像素的方向和比例,第二个是y轴像素的方向和比例,最后两个数字是绝对像素地址中的原点位置。

所以如果你想要原点在右下角,x 从右到左,y 从下到上,那么 ctx.setTransform(-1,0,0,-1,499,499) 但你会仍然必须在正坐标中绘制对象。

或者对于原点在 Canvas 中心的 y 向上 x 从左到右的数学系统 ctx.setTransform(1,0,0,-1,250,250)

关于javascript - 在 HTML5 Canvas 上定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35470420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com