当图像尺寸改变时,如何计算以抵消实际尺寸的坐标值?

时间:2019-03-26 02:22:13

标签: c# image unity3d coordinates

我想知道从中心拉伸图像时的坐标值。

我知道纹理图像中的一个像素坐标,并且通过将射线匹配到移动屏幕来使用射线投射。

但是我不知道图像增长时坐标值如何变化。

enter image description here

图像增长时,如何计算以抵消实际尺寸的坐标值?

图像将增加到1.33f大小。

enter image description here

1 个答案:

答案 0 :(得分:2)

Unity3D中可能有更简单的方法-我在那里没有任何经验-但这听起来像是一个相当简单的缩放问题。

您需要了解以下内容:

  • 图像中心的图像坐标
    这是向量(width/2, height/2)
  • 图像中心的屏幕坐标
    图像中心在屏幕上的位置
  • 比例因子(在此示例中为1.33f

鉴于上述情况,您可以使用简单的数学公式计算要触摸的像素:

public Vector2Int ScaleTouch(Vector2Int imgCentre, Vector2Int dispCentre, float scale, Vector2Int touch)
{
    var x = imgCentre.x + (touch.x - dispCentre.x) * scale;
    var y = imgCentre.y + (touch.y - dispCentre.y) * scale;
    return Vector2Int.RoundToInt(new Vector2(x, y));
}

或者使用Vector2Vector2Int中的方法,您可以做到这一点:

public Vector2Int ScaleTouch(Vector2Int imgCentre, Vector2Int dispCentre, float scale, Vector2Int touch)
{
    var offset = Vector2.Scale(touch - dispCentre, new Vector2(scale, scale));
    return offset + imgCentre;
}

两者都假设您在xy中的比例是均匀的。如果希望灵活地在不同轴上缩放,可以提供一个缩放向量。