gpt4 book ai didi

java - 变换+缩放一组点

转载 作者:行者123 更新时间:2023-11-29 22:19:50 26 4
gpt4 key购买 nike

我编写了一个图形用户界面,用户可以在其中在 (640x480) 窗口中绘制内容。它使该绘图成为一组存储在 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] 开始。

这是问题的屏幕截图 Image of transformation issue

从图中可以看出,方框就是星星应该在的地方。如您所见,缩放是正确的,只是位置不是。这是因为绘图中的点可能从 (0,0) 开始。

有什么建议吗?

谢谢!

最佳答案

翻译一幅画,简单

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

如果您要将绘图居中,请选择一个中心(例如平均所有点),取反该值,然后将所有点平移到该值。

缩放绘图:

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

关于java - 变换+缩放一组点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13077555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com