Звезда из двух полигонов - 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); }); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д