Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当图像大小改变时,如何计算以抵消实际大小坐标值?_C#_Image_Unity3d_Coordinates - Fatal编程技术网

C# 当图像大小改变时,如何计算以抵消实际大小坐标值?

C# 当图像大小改变时,如何计算以抵消实际大小坐标值?,c#,image,unity3d,coordinates,C#,Image,Unity3d,Coordinates,我想知道图像从中心拉伸时的坐标值 我知道纹理图像中的一个像素坐标,我通过将其与移动屏幕匹配来使用光线投射 但我不知道图像增长时坐标值是如何变化的 当图像增长时,如何计算以抵消实际尺寸坐标值 图像大小将增加到1.33f 在Unity3D中可能有更简单的方法-我在那里没有任何经验-但这听起来像是一个相当简单的缩放问题 您需要了解以下内容: 图像中心的图像坐标 这是向量(宽度/2,高度/2) 图像中心的屏幕坐标 图像中心在屏幕上的位置 比例因子(1.33f,在本例中) 鉴于上述情况,您可以使用简

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

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

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

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

图像大小将增加到1.33f


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

您需要了解以下内容:

  • 图像中心的图像坐标
    这是向量
    (宽度/2,高度/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));
}
或者使用
Vector2
Vector2Int
中的方法,您可以执行以下操作:

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

两者都假设您的量表在
x
y
中是均匀的。如果希望缩放向量在不同的轴上灵活缩放,可以提供缩放向量。

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

您需要了解以下内容:

  • 图像中心的图像坐标
    这是向量
    (宽度/2,高度/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));
}
或者使用
Vector2
Vector2Int
中的方法,您可以执行以下操作:

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

两者都假设您的量表在
x
y
中是均匀的。如果希望缩放向量在不同轴上灵活缩放,可以提供缩放向量。

实际尺寸坐标
在什么位置?屏幕空间像素/厘米?WorldSpace 3d坐标?@derHugo real size坐标是屏幕空间像素
真实尺寸坐标
在什么位置?屏幕空间像素/厘米?WorldSpace 3d坐标?@derHugo real size坐标是屏幕空间像素谢谢回答。ImgCenter的图像是否更大?还是原始图像?我想,var x=imgCenter.x+(touch.x-imgCenter.x)*缩放,这是正常工作的。谢谢你的回答。ImgCenter的图像是否更大?还是原始图像?我想,var x=imgCenter.x+(touch.x-imgCenter.x)*缩放,这是正常工作的。非常感谢。