spiral_calendar/view/spiral.js

30 lines
813 B
JavaScript
Raw Normal View History

2023-11-30 19:31:13 +03:00
import * as THREE from 'three';
export const calculateGeometry = (spiralHeight) => {
let pointsOfCurve = [];
const number = 100;
for (let i = 0; i <= number; i ++) {
let p = i / number;
let x = Math.cos(p * 2 * Math.PI);
let y = p * spiralHeight;
let z = Math.sin(p * 2 * Math.PI);
pointsOfCurve.push(new THREE.Vector3(x, y, z));
}
let curve = new THREE.CatmullRomCurve3(pointsOfCurve);
return new THREE.TubeGeometry(curve, 400, 0.1, 400, false);
}
export class SpiralSegment {
constructor(number, height, material) {
this.number = number;
this.segment = new THREE.Mesh(calculateGeometry(height), material);
this.segment.position.y += number * height;
}
getSegment() {
return this.segment;
}
}