Can you find them all?
Log in to post a comment.
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
translate(dx, dy) {
return new Point(this.x + dx, this.y + dy);
}
rotateAboutOrigin(theta) {
let thetaRadians = theta * Math.PI / 180;
let newX = this.x * Math.cos(thetaRadians) - this.y * Math.sin(thetaRadians);
let newY = this.y * Math.cos(thetaRadians) + this.x * Math.sin(thetaRadians);
return new Point(newX, newY);
}
scale(n) {
return new Point(n * this.x, n * this.y);
}
eq(other) {
return ((this.x == other.x) && (this.y == other.y));
}
toArray() {
return [this.x, this.y];
}
toString() {
return `Point(${this.x}, ${this.y})`;
}
}
class LineSegment {
constructor(p1, p2) {
this.p1 = p1;
this.p2 = p2;
}
translate(dx, dy) {
return new LineSegment(this.p1.translate(dx, dy), this.p2.translate(dx, dy));
}
rotateAboutOrigin(theta) {
return new LineSegment(this.p1.rotateAboutOrigin(theta), this.p2.rotateAboutOrigin(theta));
}
scale(n) {
return new LineSegment(this.p1.scale(n), this.p2.scale(n));
}
eq(other) {
if ((this.p1.eq(other.p1)) && (this.p2.eq(other.p2))) { return true; }
if ((this.p1.eq(other.p2)) && (this.p2.eq(other.p1))) { return true; }
return false;
}
draw() {
turtle.goto(this.p1.toArray());
turtle.pendown();
turtle.goto(this.p2.toArray());
turtle.penup();
}
toString() {
return `LineSegment(${this.p1.toString()}, ${this.p2.toString()})`;
}
}
class Polygon {
constructor(edges) {
this.edges = edges;
}
translate(dx, dy) {
return new Polygon(this.edges.map(edge => edge.translate(dx, dy)));
}
rotateAboutOrigin(theta) {
return new Polygon(this.edges.map(edge => edge.rotateAboutOrigin(theta)));
}
scale(n) {
return new Polygon(this.edges.map(edge => edge.scale(n)));
}
draw() {
this.edges.map(edge => edge.draw());
}
toString() {
return `Polygon[${this.edges.map(edge => edge.toString())}]`;
}
}
function makePolygonFromVertices(vertices) {
let edges = [];
for (var i = 0; i < vertices.length - 1; i++) {
edges.push(new LineSegment(vertices[i], vertices[i+1]));
}
edges.push(new LineSegment(vertices[vertices.length - 1], vertices[0]));
return new Polygon(edges);
}
// Parameters
Canvas.setpenopacity(1);
const step = (Math.sqrt(3) - 1) * Math.sqrt(2);
const scale = 1;
const turtle = new Turtle();
turtle.penup();
const rt2 = Math.sqrt(2);
const rt3 = Math.sqrt(3);
function makeStar() {
let vertices = [
new Point(rt3 + 1, rt3 - 1),
new Point(rt3, 1),
new Point(2, 2),
new Point(1, rt3),
new Point(rt3 - 1, rt3 + 1),
new Point(0, 2),
new Point(1 - rt3, rt3 + 1),
new Point(-1, rt3),
new Point(-2, 2),
new Point(-rt3, 1),
new Point(-rt3 - 1, rt3 - 1),
new Point(-2, 0),
new Point(-rt3 - 1, 1 - rt3,),
new Point(-rt3, -1),
new Point(-2, -2),
new Point(-1, -rt3),
new Point(1 - rt3, -rt3 - 1),
new Point(0, -2),
new Point(rt3 - 1, -rt3 - 1),
new Point(1, -rt3),
new Point(2, -2),
new Point(rt3, -1),
new Point(1 + rt3, 1 - rt3),
new Point(2, 0)
];
return makePolygonFromVertices(vertices);
}
function makePoint() {
let vertices = [
new Point(1 - rt3, 1 + rt3),
new Point(0, 2 + 2 * rt3),
new Point(rt3 - 1, 1 + rt3),
new Point(0, 2)
];
return makePolygonFromVertices(vertices);
}
function makeWedge() {
let vertices = [
new Point(rt2, (rt2 / (2 - rt3)) + (4 / (1 + rt3))),
new Point(rt2, rt2 / (2 - rt3)),
new Point(0, 2 * rt2),
new Point(-rt2, rt2 / (2 - rt3)),
new Point(-rt2, (rt2 / (2 - rt3)) + (4 / (1 + rt3))),
new Point(0, (rt2 / (2 - rt3)) + (4 / (1 + rt3)) + (2 - rt3)*rt2)
];
return makePolygonFromVertices(vertices);
}
function makeTip() {
let vertices = [
new Point(2 + 2 * rt3, 0),
new Point(2 + rt2 + 2 * rt3, (2 - rt3) * rt2),
new Point(2 + rt2 + 2 * rt3, ((2 - rt3) * rt2) + (4 / (1 + rt3))),
new Point(2 * (2 + rt2 + 2 * rt3) * rt3 / 3, 0),
new Point(2 + rt2 + 2 * rt3, -((2 - rt3) * rt2) - (4 / (1 + rt3))),
new Point(2 + rt2 + 2 * rt3, -(2 - rt3) * rt2),
];
return makePolygonFromVertices(vertices);
}
function makeHex() {
let p = new Point(0, (2 + rt2 + 2 * rt3) * (((2 * rt3) - 3) / 3) * (2 * rt3 / 3));
let vertices = [];
for (var i = 0; i < 6; i++) {
vertices.push(p.rotateAboutOrigin(i * 60));
}
return makePolygonFromVertices(vertices);
}
function walk(i) {
let hexTile = [];
let d = (2 + rt2 + 2 * rt3) * scale * 2 * 2 / rt3;
let e = (2 + rt2 + 2 * rt3) * (((2 * rt3) - 3) / 3) * scale;
let star = makeStar().scale(scale);
hexTile.push(star);
for (var i = 0; i < 12; i++) {
let point = makePoint().rotateAboutOrigin(30 * i).scale(scale);
hexTile.push(point);
}
for (var i = 0; i < 12; i++) {
let wedge = makeWedge().rotateAboutOrigin(30 * i - 15).scale(scale);
hexTile.push(wedge);
}
for (var i = 0; i < 12; i++) {
let tip = makeTip().rotateAboutOrigin(30 * i).scale(scale);
hexTile.push(tip);
}
let miniHex = makeHex().scale(scale);
hexTile.push(miniHex.translate(0, d/2 + e));
hexTile.push(miniHex.translate(0, -d/2 - e));
for (var i = -7; i <= 6; i++) {
for (var j = -4; j <= 3; j++) {
hexTile.map(poly => poly.translate(d * i, d * rt3 * j).draw());
hexTile.map(poly => poly.translate(d * i, d * rt3 * j).translate(d/2, d*rt3/2).draw());
}
}
return false;
}