У меня возникли проблемы с выяснением трех вещей. (Создано с помощью панели чертежа: 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'-method обрабатывает только пользовательский интерфейс и его создание. «BufferedImage» -параметр 'updateImage'-Method может быть легко заменен на« Graphics »-Object. Фактически этот параметр используется точно один раз; для извлечения упомянутого «графического объекта» ... – Paul