eia*_*lid 6 python math scale coordinates
我有一组点,如:pointA(3302.34,9392.32),pointB(34322.32,11102.03)等.
我需要缩放它们,因此每个x和y坐标都在(0.0 - 1.0)范围内.我尝试通过首先找到数据集中的最大x值(maximum_x_value)和集合中的最大y值(minimum_y_value)来做到这一点.然后我做了以下事情:
pointA.x = (pointA.x - minimum_x_value) / (maximum_x_value - minimum_x_value)
pointA.y = (pointA.y - minimum_y_value) / (maximum_y_value - minimum_y_value)
Run Code Online (Sandbox Code Playgroud)
这会改变相对距离(?),因此使数据无法用于我的目的.有没有办法缩放这些坐标,同时保持它们的相对距离完整?
Pil*_*lsy 10
您需要将x
值和y
值缩放相同的量!我建议按两个范围中较大的一个(或者x
或者y
)进行缩放.在伪代码中,你会有类似的东西
scale = max(maximum_x_value - minimum_x_value,
maximum_y_value - minimum_y_value)
Run Code Online (Sandbox Code Playgroud)
那么点之间的所有距离都将按比例缩放scale
,这就是我认为你要求的,所以如果点距离重新缩放之前的点数p_1
是两倍,那么重新缩放之后它将是两倍.你应该能够使用毕达哥拉斯定理很容易地向自己证明这一点.p_2
p_3
假设您希望整个数据集都以两个轴(0.5, 0.5)
的范围为中心(0,1)
,最简单的方法是通过三个步骤来考虑所需的总转换:
P.x -= (maxX + minX) / 2
P.y -= (maxY + minY) / 2
(-0.5, 0.5)
:scale = max(maxX - minX, maxY - minY)
P.x /= scale
P.y /= scale
(0.5, 0.5)
将所有内容带到您想要的地方:P.x += 0.5
P.y += 0.5
这种方法的优点是可以完美地处理任何给定的输入数据,并且在保持纵横比(以及相对距离)的同时尽可能多地填充单位平方.
归档时间: |
|
查看次数: |
7292 次 |
最近记录: |