Pentagram: Difference between revisions
Content added Content deleted
(added pentagram draft task) |
(added Java) |
||
Line 14:
See also
* [http://proofsfromthebook.com/2013/08/04/angle-sum-of-a-pentagram/ Angle sum of a pentagram]
=={{header|Java}}==
{{works with|Java|8}}
<lang java>import java.awt.*;
import java.awt.geom.Path2D;
import javax.swing.*;
public class Pentagram extends JPanel {
final double degrees144 = Math.toRadians(144);
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setTitle("Pentagram");
f.setResizable(false);
f.add(new Pentagram(), BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
});
}
public Pentagram() {
setPreferredSize(new Dimension(640, 640));
setBackground(Color.lightGray.brighter());
}
private void drawPentagramR(Graphics2D g, int len, int x1, int y1,
double angle, int depth) {
if (depth == 0)
return;
int x2 = x1 + (int) (Math.cos(angle) * len);
int y2 = y1 + (int) (Math.sin(-angle) * len);
g.drawLine(x1, y1, x2, y2);
drawPentagramR(g, len, x2, y2, angle - degrees144, depth - 1);
}
private void fillPentagram(Graphics2D g, int len, int x, int y) {
double angle = 0;
Path2D.Float p = new Path2D.Float();
p.moveTo(x, y);
for (int i = 0; i < 10; i++) {
x = x + (int) (Math.cos(angle) * len);
y = y + (int) (Math.sin(-angle) * len);
p.lineTo(x, y);
angle += (i % 2 == 0 ? 0.5 : -1) * degrees144;
}
p.closePath();
g.fill(p);
}
@Override
public void paintComponent(Graphics gg) {
super.paintComponent(gg);
Graphics2D g = (Graphics2D) gg;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.setStroke(new BasicStroke(5, BasicStroke.CAP_ROUND, 0));
g.setColor(new Color(0xFFD700)); // gold
fillPentagram(g, 190, 72, 250);
g.setColor(Color.darkGray);
drawPentagramR(g, 500, 70, 250, 0, 5);
}
}</lang>
|
Revision as of 12:03, 21 April 2015
Pentagram is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
A pentagram is a star polygon, consisting of a central pentagon of which each side forms the base of an isosceles triangle.
The vertex of each triangle, a point of the star, is 36 degrees.
The task: draw (or print) a regular pentagram, in any orientation. Use a different color (or token) for
stroke and fill.
See also
Java
<lang java>import java.awt.*; import java.awt.geom.Path2D; import javax.swing.*;
public class Pentagram extends JPanel {
final double degrees144 = Math.toRadians(144);
public static void main(String[] args) { SwingUtilities.invokeLater(() -> { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setTitle("Pentagram"); f.setResizable(false); f.add(new Pentagram(), BorderLayout.CENTER); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); }); }
public Pentagram() { setPreferredSize(new Dimension(640, 640)); setBackground(Color.lightGray.brighter()); }
private void drawPentagramR(Graphics2D g, int len, int x1, int y1, double angle, int depth) {
if (depth == 0) return;
int x2 = x1 + (int) (Math.cos(angle) * len); int y2 = y1 + (int) (Math.sin(-angle) * len);
g.drawLine(x1, y1, x2, y2);
drawPentagramR(g, len, x2, y2, angle - degrees144, depth - 1); }
private void fillPentagram(Graphics2D g, int len, int x, int y) { double angle = 0;
Path2D.Float p = new Path2D.Float(); p.moveTo(x, y);
for (int i = 0; i < 10; i++) {
x = x + (int) (Math.cos(angle) * len); y = y + (int) (Math.sin(-angle) * len); p.lineTo(x, y);
angle += (i % 2 == 0 ? 0.5 : -1) * degrees144; }
p.closePath(); g.fill(p); }
@Override public void paintComponent(Graphics gg) { super.paintComponent(gg); Graphics2D g = (Graphics2D) gg;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setStroke(new BasicStroke(5, BasicStroke.CAP_ROUND, 0));
g.setColor(new Color(0xFFD700)); // gold fillPentagram(g, 190, 72, 250);
g.setColor(Color.darkGray); drawPentagramR(g, 500, 70, 250, 0, 5); }
}</lang>