regular-polygon.rkt
#lang racket
(provide
 equilateral-triangle
 equilateral-triangle-points
 square 
 square-points
 hexagon hexagon-points
 regular-polygon-points
 regular-polygon)
;;----------------------------------
(require "main.rkt")
(define (regular-polygon-points n (R '1cm) (d0 0))
  (let ((A (rotate d0 (op* R 'right))))
    (for/list ((i (in-range n)))
              (rotate (* i (/ 360 n)) A))))
(define (regular-polygon n (R '1cm) (d0 0))
  (apply op-- `(,@(regular-polygon-points n R d0) cycle)))
(define (equilateral-triangle-points (x '1cm))
  (regular-polygon-points 3 (op* (op-sqrt 3) "1/3" x) -30))
(define (square-points (x '1cm))
  (regular-polygon-points 4 (op* (op-sqrt 2) 0.5 x) -45))
(define (hexagon-points (R '1cm))
  (regular-polygon-points 6 R 0))
(define ((s-polygon f) (R '1cm))
  (apply op-- `(,@(f R) cycle)))
(define equilateral-triangle (s-polygon equilateral-triangle-points))
(define square (s-polygon square-points))
(define hexagon (s-polygon hexagon-points))