annotate mrjunejune/src/public/dog.js @ 183:a8976a008a9d

[BenchMark] Added bun bench mark to test seoboe vs other popular benchmarks.
author MrJuneJune <me@mrjunejune.com>
date Fri, 23 Jan 2026 21:19:08 -0800
parents bcc76a156aea
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
82
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
1 // -- Dog -- //
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
2 const SCREEN_WIDTH = 800;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
3 const SCREEN_HEIGHT = 600;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
4 const PIXEL_SIZE = 3;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
5 const FRAME = 60;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
6
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
7 const dog = document.getElementById("epi3D");
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
8 dog.width = SCREEN_WIDTH;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
9 dog.height = SCREEN_HEIGHT;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
10 const ctx = dog.getContext("2d");
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
11
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
12 function drawBackground() {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
13 ctx.fillStyle = "black";
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
14 ctx.fillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
15 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
16
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
17 function drawPixel({x, y}) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
18 ctx.fillStyle = "blue";
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
19 ctx.fillRect(x * SCREEN_WIDTH, y * SCREEN_HEIGHT, PIXEL_SIZE, PIXEL_SIZE);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
20 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
21
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
22 function normalize({x, y}) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
23 return {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
24 x: ((x + 1) / 2),
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
25 y: (1 - ((y + 1) / 2)),
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
26 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
27 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
28
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
29 function threeDtotwoD({x, y, z}) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
30 return {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
31 x: x/z,
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
32 y: y/z
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
33 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
34 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
35
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
36 function drawLine(point1, point2) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
37 ctx.beginPath();
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
38 ctx.moveTo(point1.x * SCREEN_WIDTH, point1.y * SCREEN_HEIGHT);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
39 ctx.lineTo(point2.x * SCREEN_WIDTH, point2.y * SCREEN_HEIGHT);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
40 ctx.lineWidth = 3;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
41 ctx.strokeStyle = "red";
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
42 ctx.stroke();
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
43 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
44
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
45 let points = [];
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
46 let vertices = [];
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
47
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
48 async function loadXYZModel(filepath) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
49 try {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
50 const response = await fetch(filepath);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
51 const xyzContent = await response.text();
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
52 // return parseXYZFile(xyzContent);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
53 return parseSmartSTL(xyzContent);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
54 } catch (error) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
55 console.error('Error loading XYZ file:', error);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
56 return null;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
57 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
58 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
59
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
60 function downsamplePoints(points, gridSize = 0.2) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
61 const grid = new Map();
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
62
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
63 for (const point of points) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
64 // Create grid cell key
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
65 const cellX = Math.floor(point.x / gridSize);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
66 const cellY = Math.floor(point.y / gridSize);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
67 const cellZ = Math.floor(point.z / gridSize);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
68 const key = `${cellX},${cellY},${cellZ}`;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
69
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
70 // Keep first point in each cell (or you could average them)
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
71 if (!grid.has(key)) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
72 grid.set(key, point);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
73 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
74 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
75
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
76 return Array.from(grid.values());
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
77 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
78
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
79 async function initModel() {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
80 const model = await loadXYZModel('/public/dog.xyz');
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
81
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
82 if (model) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
83 const normalizedPoints = normalizePoints(model.points, 1.0);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
84 points = downsamplePoints(normalizedPoints, 0.1); // grid method
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
85
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
86 vertices = model.vertices;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
87 for (let i = 0; i < points.length - 1; i++) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
88 vertices.push([i, i + 1]);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
89 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
90
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
91 // Start the animation after loading
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
92 drawAnimation();
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
93 } else {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
94 console.error('Failed to load model');
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
95 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
96 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
97
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
98 function parseSmartSTL(stlString) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
99 const lines = stlString.split('\n');
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
100 const points = [];
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
101 const vortexs = [];
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
102
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
103 let currentNormal = "";
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
104 let tempVertices = [];
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
105
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
106 lines.forEach((line) => {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
107 const trimmed = line.trim();
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
108
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
109 // 1. Detect the "Angle" (Normal)
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
110 if (trimmed.startsWith('facet normal')) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
111 const normal = trimmed.replace('facet normal ', '');
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
112 // Only care if the normal is different from the last one (it's a new angle)
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
113 // Or just keep them all for now and we'll filter by position
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
114 currentNormal = normal;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
115 tempVertices = [];
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
116 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
117
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
118 // 2. Grab the vertices
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
119 if (trimmed.startsWith('vertex')) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
120 const parts = trimmed.split(/\s+/);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
121 tempVertices.push({
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
122 x: parseFloat(parts[1]),
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
123 y: parseFloat(parts[2]),
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
124 z: parseFloat(parts[3])
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
125 });
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
126 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
127
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
128 // 3. When the triangle ends, connect them
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
129 if (trimmed.startsWith('endloop')) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
130 const startIndex = points.length;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
131 points.push(...tempVertices);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
132
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
133 // Create a triangle connection (vortex)
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
134 vortexs.push([startIndex, startIndex + 1, startIndex + 2]);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
135 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
136 });
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
137
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
138 return { points, vortexs };
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
139 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
140
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
141 // Usage:
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
142 // const { points, vortexs } = parseSmartSTL(yourStlString);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
143
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
144 initModel();
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
145
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
146 function parseXYZFile(xyzFileContent) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
147 const lines = xyzFileContent.trim().split('\n').filter(line => line.trim());
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
148
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
149 const points = lines.map(line => {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
150 const coords = line.trim().split(/\s+/).map(Number);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
151 return {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
152 x: coords[0],
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
153 y: coords[1],
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
154 z: coords[2]
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
155 };
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
156 });
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
157
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
158 return { points };
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
159 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
160
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
161 function normalizePoints(points, scale = 1.0) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
162 const xs = points.map(p => p.x);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
163 const ys = points.map(p => p.y);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
164 const zs = points.map(p => p.z);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
165
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
166 const minX = Math.min(...xs), maxX = Math.max(...xs);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
167 const minY = Math.min(...ys), maxY = Math.max(...ys);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
168 const minZ = Math.min(...zs), maxZ = Math.max(...zs);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
169
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
170 const centerX = (minX + maxX) / 2;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
171 const centerY = (minY + maxY) / 2;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
172 const centerZ = (minZ + maxZ) / 2;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
173
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
174 const rangeX = maxX - minX;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
175 const rangeY = maxY - minY;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
176 const rangeZ = maxZ - minZ;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
177 const maxRange = Math.max(rangeX, rangeY, rangeZ);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
178
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
179 return points.map(p => ({
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
180 x: ((p.x - centerX) / maxRange) * scale,
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
181 y: ((p.y - centerY) / maxRange) * scale,
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
182 z: ((p.z - centerZ) / maxRange) * scale
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
183 }));
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
184 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
185
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
186 function rotate_xz({x, y, z}, angle) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
187 return {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
188 x: x * Math.cos(angle) - z * Math.sin(angle),
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
189 y: y,
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
190 z: x * Math.sin(angle) + z * Math.cos(angle),
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
191 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
192 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
193
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
194 function move_point(point, { x, y, z}) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
195 return {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
196 ...point,
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
197 x: point.x + x,
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
198 y: 1 - (point.y + y),
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
199 z: point.z + z
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
200 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
201 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
202
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
203 function move_z(point, dz) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
204 return {...point, z: point.z + dz}
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
205 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
206
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
207 let dz = 0;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
208 let dt = 1/FRAME;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
209 let angle = 0;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
210
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
211 function drawAnimation() {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
212 drawBackground();
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
213 // dz += 1 * dt;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
214 angle += 1 * Math.PI * dt;
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
215
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
216 for (const point of points) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
217 drawPixel(
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
218 threeDtotwoD(
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
219 move_point(rotate_xz(point, angle), { x: 0.7, y: 0.5, z: 1.5})
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
220 )
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
221 );
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
222 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
223
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
224 for (const vertex of vertices) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
225 for (let i = 0; i < vertex.length - 1; i++) {
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
226 const point1 = normalize(
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
227 threeDtotwoD(
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
228 move_point(rotate_xz(points[vertex[i]], angle), { x: 0.7, y: 0.5, z: 1.5})
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
229 )
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
230 );
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
231 const point2 = normalize(
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
232 threeDtotwoD(
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
233 move_point(rotate_xz(points[vertex[i + 1]], angle), { x: 0.7, y: 0.5, z: 1.5})
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
234 )
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
235 );
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
236 drawLine(point1, point2);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
237 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
238 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
239
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
240 setTimeout(() => drawAnimation(), 1000/60);
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
241 }
1ded13720541 Added new logos.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
242 drawAnimation();