Pentagram
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>