嘿,我想写一个方法,它需要一个起始笛卡尔坐标(x,y)一个角度(以度为单位),一个长度和多个边并绘制一个小程序的形状。到目前为止,这是我的,但我无法弄清楚我做错了什么。我计划对实际的角度变化使用线变换,这还没有写入,但以一个角度绘制线的逻辑应该可行,但并不像我所能说的那样。我是否可以用一些新的眼光来看待这件事,并告诉我我是否错过了一些东西。Java 1.5使用线条和角度绘制形状的问题
public void paint(Graphics g)
{
g.setColor(Color.BLACK);
Point startPt = new Point(0,0);
//Function in question
drawRegularPolygon(g, startPt, 5,60,50);
}
public static void drawRegularPolygon(Graphics g, Point2D startPoint, int numOfSides, int angle, int length)
{
Point2D current = startPoint;
for(int i=0; i<numOfSides; i++)
{
drawAngularLine(g, current, angle, length);
current = getEndPoint(current ,length,angle);
}
}
public static void drawAngularLine(Graphics g, Point2D startPoint, int angle, int length)
{
g.setColor(Color.BLACK);
Point2D endPoint = getEndPoint(startPoint, length, angle);
((Graphics2D) g).draw(new Line2D.Double(startPoint, endPoint));
}
private static Point2D getEndPoint(Point2D p, int length, int angle)
{
//Starting point you know (x1, x2),
//end point is (x1 + l * cos(ang), y1 + l * sin(ang))
//where l is the length and ang is the angle.
Point2D retVal = p;
double x = Math.cos(Math.toRadians(angle)*length+p.getX());
double y = Math.sin(Math.toRadians(angle)*length+p.getY());
retVal.setLocation(x,y);
return retVal;
}
@Ben&Peter:这两个真的很好的答案,并且对我的数学很有帮助,并且Point2D retVal = p.clone();解决了我的绘图问题。我给了+1两个你的答案,但不知道哪一个采取..... – Terrance 2010-11-01 12:17:29