#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))