Dihedron

by evgkch

JavaScript

class Dihedron {
	static createVertex(radius, phi){
    return {
      x: radius * Math.cos(phi),
      y: radius * Math.sin(phi),
    };
  }
  static createVerticies(radius, N){
  	const verticies = [];
    for (let i = 0; i < N; i++)
    {
    	const vertex = Dihedron.createVertex(
        radius,
        2 * Math.PI  * i / N
      );
      verticies.push(vertex);
    }
    return verticies;
  }
  constructor(radius, N){
  	this.radius = radius;
    this.N = N;
  	this.verticies = [];
    for (let i = 0; i < N; i++)
    {
    	const vertex = Dihedron.createVertex(
        radius,
        2 * Math.PI  * i / N
      );
      this.verticies.push(vertex);
    }
    this.position = { x: 0, y: 0 };
  }
  expand(k){
  	
  }
  rotate(phi, position){
  	// const posX = this.position.x;
    // const posY = this.position.y;
  	const cosPhi = Math.cos(phi);
    const sinPhi = Math.sin(phi);
  	this.verticies.forEach(vertex=>{
    	const { x, y } = vertex;
    	vertex.x = x * cosPhi - y * sinPhi;
      vertex.y = x * sinPhi + y * cosPhi;
    });
    return this;
  }
  move(x, y){
  	this.verticies.forEach(vertex=>{
    	vertex.x += x;
      vertex.y += y;
    });
    this.position.x = x;
    this.position.y = y;
    return this;
  }
  clone(){
  	return Object.assign(
    	Object.create(Object.getPrototypeOf(this)),
      this
    );
  }
}

class Triangle extends Dihedron {
	constructor(radius){
  	super(radius, 3);
  }
}

class Square extends Dihedron {
	constructor(radius){
  	super(radius, 4);
  }
}

class Hexagon extends Dihedron {
	constructor(radius){
  	super(radius, 6);
  }
}

const square = new Square(1);
square.rotate(Math.PI / 4);
console.log(square);