c# - 当图像尺寸发生变化时,如何计算以抵消真实尺寸的坐标值?
问题描述
我想知道从中心拉伸图像时的坐标值。
我知道纹理图像中的一个像素坐标,并且我通过将其与移动屏幕匹配来使用光线投射。
但我不知道图像增长时坐标值如何变化。
当图像增长时,你如何计算来对抗真实大小的坐标值?
图像将增加到 1.33f 大小。
解决方案
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));
}
或者使用中的方法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
。如果您希望它能够灵活地在不同轴上缩放,您可以提供一个缩放矢量。
推荐阅读
- c# - DataTable:LINQ 或 LAMBDA 的动态 Group By 表达式
- c# - 如何将路由 http://localhost:53244/page.aspx?ID=7842 映射到 http://localhost:53244/Home
- ios - 如何仅在 iOS 中获取日期而不是时间
- sql - SQL Reindex 使我的数据库增加了一倍
- python - 删除所有非数字部分,但在 python 中保留逗号
- c# - Unity3d - UnityWebRequest 运行 php 代码
- json-api - JSONAPI 按日期范围过滤
- python - 如何将嵌套字典转换为 pandas DataFrame
- c# - rdp 文件启动调试而不是在服务器上
- xslt - 如何在 XSLT 中为 if 条件创建布尔变量?