annotate mrjunejune/src/public/dog.js @ 279:b3b547563ec7

Add Google connector service and agent wiki Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code. Co-authored-by: Copilot <[email protected]> Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
author MrJuneJune <me@mrjunejune.com>
date Mon, 17 Aug 2026 22:22:36 -0700
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();