在HTML5 Canvas中,我可以让y轴上升而不是下降吗?

Pat*_*ney 24 javascript html5 canvas

我正在Canvas中绘制一个图形,并且正在努力解决y轴"向后"的问题.原点位于左上角,增加值下降而不是上升.

(0,0)            (x,0)       (0,y) ^
      +-------------->             |
      |                            |
      |    CANVAS                  |     INSTEAD
      |    DOES THIS               |     OF THIS
      |                            |
      |                            +----------------->
(0,y) v                       (0,0)              (x,0) 
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用translate()将原点移动到左下角.

context.translate(0, canvas.height);
Run Code Online (Sandbox Code Playgroud)

而且我知道我可以使用scale()反转y轴.

context.scale(1, -1);
Run Code Online (Sandbox Code Playgroud)

这似乎有效,除了它导致文本颠倒.有没有办法让Canvas的坐标按照我期望的方式工作?

小智 16

对于更现代的设置,您可以使用context.transform(1, 0, 0, -1, 0, canvas.height).这会翻转y轴并将整个画布移动一屏.

有关可用转换的更多信息:https: //developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/transform

  • 不幸的是,这种方法现在似乎也可以翻转文本。 (5认同)

Ski*_*ick 10

我认为你做得更好,只是习惯它.原点位于左上方,大多数基于像素的视频/屏幕API.

这是关于这个主题的讨论.

  • 尽管边界框位于“底部 > 顶部”,但它非常令人困惑。 (2认同)
  • 当你想到它几分钟时,它并不是那么令人困惑.它实际上远不如右边所接受的公认智慧(在很多人类语言中都不是这样).范例是左上角是已知的,所有值都是从那里出来的.这是合乎逻辑的,因为当在任意大小的屏幕或文档中呈现某些内容时,它是我们唯一可以依靠的东西. (2认同)
  • 我认为*文件*是关键词.屏幕可以是两种方式,取决于它们是用于显示文本还是笛卡尔图形; 但我们经常在*上角*的起源是因为**文件**在几乎所有人类语言中从上到下,而不是从下到上(从下到上很少见).HTML5 canvas遵循该约定,因为HTML基于文档概念(因此是DOM).这不是基于像素的. (2认同)

小智 5

情节graph_height - y.

例如:http://jsfiddle.net/nVUUM/

<canvas></canvas>

<script>
var e = document.getElementsByTagName('canvas')[0];
var c = e.getContext('2d');

function plot(x,y) {
  c.fillRect(x, e.height-y, 5, 5);  
}

plot(100,50);
plot(200,100);
</script>
Run Code Online (Sandbox Code Playgroud)