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