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_2p_3
假设您希望整个数据集都以两个轴(0.5, 0.5)的范围为中心(0,1),最简单的方法是通过三个步骤来考虑所需的总转换:
P.x -= (maxX + minX) / 2P.y -= (maxY + minY) / 2(-0.5, 0.5):scale = max(maxX - minX, maxY - minY)P.x /= scaleP.y /= scale(0.5, 0.5)将所有内容带到您想要的地方:P.x += 0.5P.y += 0.5这种方法的优点是可以完美地处理任何给定的输入数据,并且在保持纵横比(以及相对距离)的同时尽可能多地填充单位平方.