嘿,我想寫一個方法,它需要一個起始笛卡爾座標(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