将一个矩形的坐标转换为另一个矩形

时间:2013-12-17 09:19:33

标签: c# geometry transformation computational-geometry coordinate-transformation

enter image description here

在上图中我显示了两个矩形

  • 矩形1 ,其x可在-900到13700之间变化,Y可在-600到6458之间变化
  • 矩形2 ,其坐标X可以在0到3000之间变化,y可以在0到2000之间变化

另外: 矩形2 的起点位于左上角位置(0,0),而矩形1 有起点(宽度/ 2,身高/ 2)。

我需要做什么:使用缩放或翻译将矩形1 的点转换为矩形2 的点。

那么,为了将矩形1 的坐标转换为矩形2 xy坐标应该是什么缩放因子?

3 个答案:

答案 0 :(得分:5)

如果:

Rectangle 1 has (x1, y1) origin and (w1, h1) for width and height, and
Rectangle 2 has (x2, y2) origin and (w2, h2) for width and height, then

Given point (x, y) in terms of Rectangle 1 coords, to convert it to Rectangle 2 coords:

xNew = ((x-x1)/w1)*w2 + x2;
yNew = ((y-y1)/h1)*h2 + y2;

以浮点计算并在之后转换回整数,以避免可能的溢出。


在C#中,上面的内容类似于:

PointF TransformPoint(RectangleF source, RectangleF destination, PointF point)
{
    return new PointF(
        ((point.X - source.X) / source.Width) * destination.Width + destination.X,
        ((point.Y - source.Y) / source.Height) * destination.Height + destination.Y);
}

答案 1 :(得分:0)

尝试使用:

rectangelOne.x = rectangelTwo.x + rectangelTwo.width / 2;
rectangelOne.y = rectangelTwo.y + rectangleTwo.height / 2;

如果你的rectangleOne的枢轴是正确的,它应该自动居中,否则添加:

rectangleOne.x -= rectangleOne.width / 2;
rectangleTwo.y -= rectangleOne.height / 2;

希望这会有所帮助。

答案 2 :(得分:0)

float transformValue (float x,float  A,float B, float C, float D){

    return C + ((x-A) * (D-C)/(B-A));

}