首页 > 解决方案 > 当图像尺寸发生变化时,如何计算以抵消真实尺寸的坐标值?

问题描述

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

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

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

在此处输入图像描述

当图像增长时,你如何计算来对抗真实大小的坐标值?

图像将增加到 1.33f 大小。

在此处输入图像描述

标签: c#imageunity3dcoordinates

解决方案


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。如果您希望它能够灵活地在不同轴上缩放,您可以提供一个缩放矢量。


推荐阅读