我有問題搞清楚三件事情。 (使用繪圖面板創建的:http://www.buildingjavaprograms.com/DrawingPanel.java)Java:繪製明星和連接點與繪圖面板
問題1:繪製多邊形,使其居中且未彎曲。用更多的點畫出來並不明顯。
問題2:將星星的所有點連接在一起,所以它是一個巨大的圓圈(虛線)。我不明白爲什麼會發生這種情況,除非這種方法不是最好的。
問題3:當繪製的點數少時,我注意到它沒有正確繪製點,它看起來像一個正方形。
我真的很感謝幫助!
import java.awt.*;
public class StarSampler {
public static void main(String[] args)
{
DrawingPanel panel = new DrawingPanel(500, 500);
Graphics2D g = panel.getGraphics();
g.setColor(Color.BLUE);
fillStar(g, 250, 250, 150, 5, 1);
}
public static void fillStar(Graphics2D g, int ctrX, int ctrY, int radius, int nPoints, double spikiness)
{
double xDouble[] = new double[2*nPoints];
double yDouble[] = new double[2*nPoints];
int xPoint[] = new int[100];
int yPoint[] = new int[100];
for (int i = 0; i < 2*nPoints; i++)
{
double iRadius = (i % 2 == 0) ? radius : (radius * spikiness);
double angle = (i * 720.0)/(2*nPoints);
xDouble[i] = ctrX + iRadius * Math.cos(Math.toRadians(angle));
yDouble[i] = ctrY + iRadius * Math.sin(Math.toRadians(angle));
for (int j = 0; j < nPoints; j++) // Casts for ints and doubles
{
xPoint[j] = (int) xDouble[j];
yPoint[j] = (int) yDouble[j];
}
}
g.fillPolygon(xPoint, yPoint, nPoints); // Creates polygon
// Polygon gets drawn crookedly
g.drawPolyline(xPoint, yPoint, nPoints); // Draws lines to connect points
// Two lines go straight to (0,0) when nPonts*2 and nothing without *2?
}
}
我的輸出:
我的目標輸出(如果沒有標記點,只是舉例兩顆星):
這是我不好,我使用拉絲面板(http://www.buildingjavaprograms.com/DrawingPanel.java)不是的JPanel。但我真的很感激代碼,我正試圖理解你實現的邏輯。 – Aramza
@Aramza UI組件並不重要。 'updateImage'方法包含所有繪製星標的邏輯,而'main'方法只處理UI並且它是創建的。 'updateImage'-Method的'BufferedImage'參數可以很容易地被'Graphics'對象替換。事實上,該參數只用一次;檢索所述'Graphics'-Object ... – Paul