Java 在正确位置绘制多边形
这个问题是继续的。 我需要画几个多边形。我可以单独绘制每个多边形,但不能在正确的位置绘制所有多边形 我从此文件加载有关多边形的信息: 我有类Kraj,它代表每个多边形Java 在正确位置绘制多边形,java,graphics,Java,Graphics,这个问题是继续的。 我需要画几个多边形。我可以单独绘制每个多边形,但不能在正确的位置绘制所有多边形 我从此文件加载有关多边形的信息: 我有类Kraj,它代表每个多边形 public class Kraj { String name; Point2D.Double points[]; Point2D.Double transPoints[]; Point2D.Double max; Point2D.Double min; // polygon
public class Kraj {
String name;
Point2D.Double points[];
Point2D.Double transPoints[];
Point2D.Double max;
Point2D.Double min;
// polygon
Path2D.Double polygon;
ArrayList<Kraj> kraje;
public Kraj(String name, Point2D.Double body[])
{
this.name = name;
this.body = Arrays.copyOf(body, body.length);
// calculate a bounding box
zjistiLimity();
this.transPoints = new Point2D.Double[points.length];
}
private void transformToWindow(int width, int height)
{
// convert to window
double convertX = width / (max.x - min.x);
double convertY = height / (max.y - min.y);
// calculate polygon to fit in window with right aspect ratio
double convert = convertX > convertY ? convertY : convertX;
// min = 0, convert to interval <0: infinity> and multiply by convert,
for (int j = 0; j < points.length; j++) {
double transX = (points[j].x - min.x) * convert;
double transY = height - (points[j].y - min.y) * convert;
transPoints[j] = new Point2D.Double(transX, transY);
}
this.polygon = new Path2D.Double();
this.polygon.moveTo(transBody[0].x, transBody[0].y);
for (int i = 1; i < body.length; i++)
this.polygon.lineTo(transPoints[i].x, transPoints[i].y);
this.polygon.closePath();
}
private void drawKraj(Graphics2D g2, int width, int height) {
g2.setStroke(new BasicStroke(2));
g2.fill(polygon);
// vykreslime obrys
g2.setColor(Color.black);
g2.draw(polygon);
}
public void draw(Graphics2D g2,
int contextWidth, int contextHeight)
{
// fit to window size
int sirkaSOdsazenim = contextWidth;
int vyskaSOdsazenim = contextHeight;
this.transformujToWindow(sirkaSOdsazenim, vyskaSOdsazenim);
this.drawKraj(g2, sirkaSOdsazenim, vyskaSOdsazenim);
}
/**
* Set min and max
*/
private void zjistiLimity() {
max = new Point2D.Double(-Double.MAX_VALUE, -Double.MAX_VALUE);
min = new Point2D.Double(Double.MAX_VALUE, Double.MAX_VALUE);
for(int j = 0; j < 10; j++)
{
for (int i = 0; i < body.length; i++)
{
if (points[i].getX() < min.getX()) min.x = points[i].getX();
if (points[i].getY() < min.getY()) min.y = points[i].getY();
if (points[i].getX() > max.getX())max.x = points[i].getX();
if (points[i].getY() > max.getY()) max.y = points[i].getY();
}
}
}
公共类Kraj{
字符串名;
点2D.双点[];
点2D.双转置点[];
点2D。双最大值;
点2D。双分钟;
//多边形
双多边形;
ArrayList kraje;
public Kraj(字符串名,Point2D.Double body[])
{
this.name=名称;
this.body=Arrays.copyOf(body,body.length);
//计算边界框
zjistility();
this.transports=新点2d.Double[points.length];
}
私有void transformToWindow(整数宽度、整数高度)
{
//转换为窗口
双转换器x=宽度/(最大x-最小x);
双换算=高度/(最大y-最小y);
//计算多边形以适合具有正确纵横比的窗口
双转换=convertX>convertY?convertY:convertX;
//最小值=0,转换为间隔并乘以转换,
对于(int j=0;jmax.getX())max.x=点[i].getX();
如果(点[i].getY()>max.getY())max.y=points[i].getY();
}
}
}
使用此代码,我可以绘制适合窗口的多边形。但我需要绘制所有适合窗口的多边形(计算坐标以创建此地图):
我需要编辑或添加什么?谢谢所有的答案
我需要画几个多边形。我可以单独画每个多边形,但我不能在正确的位置画所有多边形
如果可以单独绘制每个多边形,则多边形是正确的
您需要将原点添加到Kraj
类中。然后draw
方法将多边形点从多边形原点转换为地图原点。假设多边形原点为(10,10),需要在(20,30)处绘制特定多边形,然后在绘制多边形之前,将多边形中每个点的x和y分别添加10和20
在调整每个点的X和Y值之前,可以在“绘制”例程中复制多边形
编辑以添加:这里是您自己的代码,已修改以转换原点。我尚未测试这些更改
private void transformToWindow(Point2D windowOrigin, int width, int height)
{
// convert to window
double convertX = width / (max.x - min.x);
double convertY = height / (max.y - min.y);
// calculate polygon to fit in window with right aspect ratio
double convert = convertX > convertY ? convertY : convertX;
// min = 0, convert to interval <0: infinity> and multiply by convert,
for (int j = 0; j < points.length; j++) {
double transX = (points[j].x - min.x) * convert;
double transY = height - (points[j].y - min.y) * convert;
transPoints[j] = new Point2D.Double(transX, transY);
}
this.polygon = new Path2D.Double();
double xShift = windowOrigin.x - transBody[0].x;
double yShift = windowOrigin.y - transBody[0].y;
this.polygon.moveTo(windowOrigin.x, windowOrigin.y);
for (int i = 1; i < body.length; i++)
this.polygon.lineTo(transPoints[i].x + xShift,
transPoints[i].y + yShift);
this.polygon.closePath();
}
private void transformToWindow(点2D窗口原点、整数宽度、整数高度)
{
//转换为窗口
双转换器x=宽度/(最大x-最小x);
双换算=高度/(最大y-最小y);
//计算多边形以适合具有正确纵横比的窗口
双转换=convertX>convertY?convertY:convertX;
//最小值=0,转换为间隔并乘以转换,
对于(int j=0;j
我需要画几个多边形。我可以单独画每个多边形,但我不能在正确的位置画所有多边形
如果可以单独绘制每个多边形,则多边形是正确的
您需要将原点添加到Kraj
类中。然后draw
方法将多边形点从多边形原点转换为地图原点。假设多边形原点为(10,10),需要在(20,30)处绘制特定多边形,然后在绘制多边形之前,将多边形中每个点的x和y分别添加10和20
在调整每个点的X和Y值之前,可以在“绘制”例程中复制多边形
编辑以添加:这里是您自己的代码,已修改以转换原点。我尚未测试这些更改
private void transformToWindow(Point2D windowOrigin, int width, int height)
{
// convert to window
double convertX = width / (max.x - min.x);
double convertY = height / (max.y - min.y);
// calculate polygon to fit in window with right aspect ratio
double convert = convertX > convertY ? convertY : convertX;
// min = 0, convert to interval <0: infinity> and multiply by convert,
for (int j = 0; j < points.length; j++) {
double transX = (points[j].x - min.x) * convert;
double transY = height - (points[j].y - min.y) * convert;
transPoints[j] = new Point2D.Double(transX, transY);
}
this.polygon = new Path2D.Double();
double xShift = windowOrigin.x - transBody[0].x;
double yShift = windowOrigin.y - transBody[0].y;
this.polygon.moveTo(windowOrigin.x, windowOrigin.y);
for (int i = 1; i < body.length; i++)
this.polygon.lineTo(transPoints[i].x + xShift,
transPoints[i].y + yShift);
this.polygon.closePath();
}
private void transformToWindow(点2D窗口原点、整数宽度、整数高度)
{
//转换为窗口
双转换器x=宽度/(最大x-最小x);
双重公司