Звезда из двух полигонов - Java

Узнай цену своей работы

Формулировка задачи:

Привет. У меня задание. С помощью класса awt.Polygon нарисовать звезду. В общем мой класс звезда я наследую от класса Исогон По заданию надо нарисовать два шестиугольника Один маленький. Второй большой. Потом один из них повернуть на 30 градусов А дальше я не знаю. Есть идеи?? Спасибо
import java.awt.Point;
/**
 * Created by Katia on 27.05.2016.
 */
public class Star extends Isogon{
 
    public Star (int mittleX, int mittleY, int radius, int winkel) {
         super( mitteX, mitteY, radius, 6 );
 
        Isogon s1 = new Isogon( mittleX, mittleY, radius/2, 6 );
        this.rotiere( 30 ); // poworot
        int [] arrx = s1.xpoints;
        int [] arry = s1.ypoints;
for(int i =0; i<6; i++){
    if( this.contains(  new Point(arrx[i] ,arry[i])) ){

    }
}
      
    }
 
    public Star (int mittleX, int mittleY, int radius ) {
        super( mittleX, mittleY, radius, 6, 30 );
    }

Решение задачи: «Звезда из двух полигонов»

textual
Листинг программы
import static java.awt.BorderLayout.CENTER;
import static java.awt.Color.GREEN;
import static java.awt.Color.RED;
import static java.lang.Math.cos;
import static java.lang.Math.min;
import static java.lang.Math.sin;
import static java.lang.Math.toRadians;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
 
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon;
 
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
 
public class StarDrawer extends JComponent {
 
    private static final int POINTS_COUNT = 6;
    private static final double ANGLE_60 = toRadians(60);
    private static final double ANGLE_30 = toRadians(30);
 
    private static final double RADIUS_COEFFICIENT = .8;
 
    @Override
    public void paintComponent(final Graphics g) {
        super.paintComponent(g);
 
        final Point[] points = createPoints();
 
        ((Graphics2D)g).setStroke(new BasicStroke(5));
 
        g.setColor(RED);
        g.drawPolygon(star(points));
 
        g.setColor(GREEN);
        g.drawPolygon(star(rotateAt(points, ANGLE_30)));
    }
 
    private Polygon star(final Point[] points) {
        final Polygon result = new Polygon();
        for (int i = 0; i < points.length; i++) {
            final Point point = points[i];
            result.addPoint(point.x, point.y);
        }
        return result;
    }
 
    private Point[] createPoints() {
        final Point O = getCenter();
 
        final int radius = (int) (RADIUS_COEFFICIENT * min(O.x , O.y));
 
        final Point[] result = new Point[POINTS_COUNT];
        for (int i = 0; i < result.length; i++) {
            final int x = (int) (O.x + radius * cos(i * ANGLE_60));
            final int y = (int) (O.y + radius * sin(i * ANGLE_60));
            result[i] = new Point(x, y);
        }
        return result;
    }
 
    private Point getCenter() {
        return new Point(getWidth() / 2, getHeight() / 2);
    }
 
    private Point[] rotateAt(final Point[] points, final double angle) {
        final Point O = getCenter();
        final Point[] result = new Point[points.length];
        for (int i = 0; i < result.length; i++) {
            final Point point = points[i];
            final int x = (int)(O.x + (point.x - O.x) * cos(angle) - (point.y - O.y) * sin(angle));
            final int y = (int)(O.y + (point.y - O.y) * cos(angle) + (point.x - O.x) * sin(angle));
 
            result[i] = new Point(x, y);
        }
        return result;
    }
 
    public static void main(final String[] args) {
        SwingUtilities.invokeLater(() -> {
            final JFrame f = new JFrame();
            f.setLayout(new BorderLayout());
            f.add(new StarDrawer(), CENTER);
            f.setDefaultCloseOperation(EXIT_ON_CLOSE);
 
            f.setSize(new Dimension(800, 600));
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        });
    }
 
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5