【问题标题】:Transform + scale a set of points变换+缩放一组点
【发布时间】:2012-10-25 21:26:15
【问题描述】:

我编写了一个用户在 (640x480) 窗口中绘制东西的 gui。它使该绘图成为存储在 Vector 数组中的一组点。 现在,我如何将这些点集转换为原点(窗口左上角 0,0)或将其放在指定的位置? 我想要的窗口的宽度和高度也是 640x480。

解决之后,如何将新的点集缩放到我想要的大小?

更新 1

我解决了规模问题,但没有解决定位问题。这幅画没有去我告诉它的地方。下面是我目前所拥有的代码。

float scaleX = (float)width/boundingPoints.width;
float scaleY = (float)height/boundingPoints.height;
for(int i = 0; i < cg_points.size()-1; i++){
    Point p1 = cg_points.get(i);
    Point p2 = cg_points.get(i+1);
    g.drawLine((int)(p1.x*scaleX) + pos.x, (int)(p1.y*scaleY) + pos.y, (int)(p2.x*scaleX) + pos.x, (int)(p2.y*scaleY) + pos.y);
}

我希望绘图从 pos [x, y] 所在的位置开始。目前的问题是这个。它确实遵循了 pos.x 和 pos.y 的做法,但距离很远,并且不是从 pos[x,y] 开始。

这是问题的屏幕截图

正如您从图片中看到的那样,盒子应该是星星所在的位置。如您所见,缩放是正确的,而不是位置。这是因为绘图中的点可能从 (0,0) 开始。

有什么建议吗?

谢谢!

【问题讨论】:

  • 那么这是一个什么样的程序呢?爪哇? JavaScript?请说明这两个标签的必要性。
  • 需要这两个标签是因为这既适用于 java 也适用于 JavaScript。
  • 对不起,我还是不明白。您能否解释一下并提供一些细节——您如何将它用于 Java 和 JavaScript?
  • 我用 Java 编写了一个编辑器,它允许你做某些事情,然后它将这些东西转换为 javascript。
  • 在数学语言中,变换是加法/减法,缩放是乘法/除法。

标签: java javascript math vector matrix


【解决方案1】:

要翻译绘图,只需

foreach point in array
    point.x += translate.x
    point.y += translate.y

如果要使绘图居中,请选择一个中心(例如平均所有点),取反该值,然后按该值转换所有点。

缩放绘图:

foreach point in array
    point.x *= scale
    point.y *= scale

【讨论】:

    【解决方案2】:

    所以我解决了它......耶!这是下面的代码,以防您遇到与我相同的问题。

        float scaleX = (float)width/boundingPoints.width;
        float scaleY = (float)height/boundingPoints.height;
        int bx = boundingPoints.x;
        int by = boundingPoints.y;
        for(int i = 0; i < cg_points.size()-1; i++){
                Point p1 = cg_points.get(i);
                Point p2 = cg_points.get(i+1);
                int x1 = (int) ((p1.x-bx)*scaleX);
                x1 += pos.x;
                int y1 = (int) ((p1.y-by)*scaleY);
                y1 += pos.y;
                int x2 = (int) ((p2.x-bx)*scaleX);
                x2 += pos.x;
                int y2 = (int) ((p2.y-by)*scaleY);
                y2 += pos.y;
    
                g.drawLine(x1, y1, x2, y2);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-20
      • 2017-08-27
      • 2017-09-24
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      相关资源
      最近更新 更多