我有一个带有按钮的类Demo,当用户单击名为polygon的按钮时,从它们点击的点开始绘制多边形,代码在绘图中工作正常但不幸的是它在错误的位置绘制多边形。 / p>
PolygonShape类
class PolygonShape {
int x, y;
private Polygon p;
public PolygonShape(int x, int y) {
// the x, y sent to this constructor
//are the cordinates of the point where the user clicked
this.x = x;
this.y = y;
}
public void draw(Graphics g) {
p = new Polygon();
for (int i = 0; i < 5; i++)
p.addPoint((int) (x + y * Math.cos(i * 2 * Math.PI / 5)),
(int) (x + y * Math.sin(i * 2 * Math.PI / 5)));
g.drawPolygon(p);
}
}
答案 0 :(得分:4)
假设x
和y
是多边形的中心,您错误地使用它们(您需要将x
添加到x坐标和y
到y坐标)并且您错过了另一个重要变量:r
表示半径。您应该在公式中乘以y
,而不是乘以r
。
换句话说:
class PolygonShape {
int x, y, r;
private Polygon p;
public PolygonShape(int x, int y, int r) {
this.x = x;
this.y = y;
this.r = r;
}
// Provide a default radius of 100 pixels if no radius is given.
public PolygonShape(int x, int y) {
this(x, y, 100);
}
public void draw(Graphics g) {
p = new Polygon();
for (int i = 0; i < 5; i++) {
double angle = i * 2 * Math.PI / 5;
p.addPoint((int) (x + r * Math.cos(angle)),
(int) (y + r * Math.sin(angle)));
}
g.drawPolygon(p);
}
}
答案 1 :(得分:0)
另一种选择是在绘图之前在图形上设置平移:
final Graphics2D g2 = (Graphics2D)g.create();
g2.translate(x, y);
g2.drawPolygon(p);
您可能需要执行-x, -y
,您必须尝试。
我正在研究一个新的图形对象(g2
),以便翻译不是永久性的。
优点是,可以在多个地方绘制相同的形状,只需改变x
和y
。