我有一个 2D 坐标数组,用于在框中绘制曲线(w,h)。现在我想将坐标缩放到一个框 (x,y) 中,其中 x 或 y 或两者都小于 w 和 h。技巧部分是我必须保持纵横比。任何帮助将不胜感激。
问问题
2201 次
3 回答
3
我不确定我的问题是否正确,但如果我这样做了,那应该很容易:
1.检查你的新边(x
或y
)哪个更小;
x/w
2.除以(if x<y
)或y/h
(if )得到比例尺y<x
;
3.一旦你知道了这个比率,用那个值按比例缩放你的路径。
你做最后一步的方式,这取决于你如何保持/绘制你的阵列。如果它只是一个简单的点缓冲区,则可以使用矩阵缩放。此外,虽然它超出了问题的范围,但如果您需要非常快地完成它(路径有很多点),请查看 Apple 的Accelerate矩阵/向量乘法框架。
于 2013-01-08T16:44:29.627 回答
2
如果您需要保持比例,则需要进行纵横匹配或纵横填充。无论哪种方式,您都需要为 x 和 y 变换找到一个比例因子。
首先计算 X 和 Y 的单个神圣因素
(w1, h1) -> (w2, h2) (assuming all floats)
float xScaleFactor = w2 / w1;
float yScaleFactor = h2 / h1;
现在,由于您要使其更小,因此请采用最小比例因子进行方面拟合或最大比例因子进行方面填充。
float scaleFactor = MIN(xScaleFactor, yScaleFactor); // Assuming aspect fit
现在只需将每个点的 x 和 y 分量乘以比例因子。
于 2013-01-08T16:42:48.593 回答
0
获取两个 x 和 y 坐标之间的差异。确定哪个百分比差异更大,然后将绘制曲线时使用的坐标乘以该百分比。结果将是大小刚好适合较小框的曲线。
您可能必须向曲线的坐标添加偏移量才能将其正确定位在框内。
根据您的需要,寻找绘图 API 可能会更好,而不是手动执行此操作,因为您可能会获得一些免费(或便宜)的功能,例如让用户能够捏缩放等。
于 2013-01-08T16:46:10.343 回答