为什么正Y轴向下,正X轴向右?

时间:2015-08-21 11:00:22

标签: android

当编写这样的代码时,为什么y轴反转,这意味着正值使对象下降而负值使其上升?

 animation.update();

    if(up){
        dy -=1.1;

    }
    else{
        dy +=1.1;
    }

    if(dy>14)dy = 14;
    if(dy<-14)dy = -14;

    y += dy*2;
    dy = 0;
}

public void draw(Canvas canvas)
{
    canvas.drawBitmap(animation.getImage(),x,y,null);
}

2 个答案:

答案 0 :(得分:7)

请注意,Android屏幕中的原点(0,0)位于屏幕的左上角角落。因此,当您向y axis添加值时,对象会向下移动,当减去值时,对象会向上移动。

在Android设备中:

 Origin
 |
 V
 *-------------------------------
 | ----> X axis                  |
 | |                             |
 | |                             |
 | V Y-axis                      |
 |                               |
 |                               |
 |                               |
 |                               |
 |                               |
 |                               |
 |                               |
 |                               |
 |                               |
 |                               |
 |                               |
 |                               |
 |                               |
 |                               |
 |                               |
 |                               |
  -------------------------------

可能的历史记录:

当电视机用作屏幕时,屏幕空间计算开始了。电视的光栅枪也从左上角角开始,所以这被认为是原点。

如需进一步参考,请参阅here

<强>转换

但是,您可以使用Canvas.setMatrix()来使用android中的坐标转换。

您可以使用

翻转Canvas
canvas.translate(0,canvas.getHeight());
canvas.scale(1, -1) 

将其移至正确的位置。

您可以参考here进行转换。

答案 1 :(得分:1)

这是解决计算机显示问题的常用方法。它可能源于视频存储器从左上角逐行映射到屏幕,这反过来很可能来自于电子束在旧CRT显示器中扫过屏幕的事实。

您可以使用Canvas.setMatrix()和适当的变换矩阵将坐标系更改为更“数学”。为了创建“镜像”变换矩阵,使用-1作为缩放操作的参数(即matrix.setScale(0, -1)