Skip to content

Commit 4096b0f

Browse files
committed
wip
1 parent 47f49f8 commit 4096b0f

File tree

3 files changed

+270
-0
lines changed

3 files changed

+270
-0
lines changed

_config.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ lang: en
1414
markdown: kramdown
1515
theme: minima
1616
mathjax: true
17+
mermaid: true
1718
highlighter: rouge
1819
exclude:
1920
- Gemfile

_layouts/post.html

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,5 +196,40 @@ <h3>Related Posts</h3>
196196
addRandomGlitch();
197197
}
198198
</script>
199+
200+
<!-- Mermaid.js integration -->
201+
{% if page.mermaid or site.mermaid %}
202+
<script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
203+
<script>
204+
document.addEventListener('DOMContentLoaded', function() {
205+
mermaid.initialize({
206+
startOnLoad: false, // Disable automatic start
207+
theme: 'default', // or 'dark', 'forest', 'neutral'
208+
securityLevel: 'loose', // Use 'loose' if you have complex diagrams or external links
209+
// Add other configuration options as needed
210+
});
211+
// Transform fenced code blocks with class 'language-mermaid' into mermaid divs.
212+
// Jekyll/Kramdown with Rouge highlighter typically places the 'language-mermaid' class on the <code> tag,
213+
// not the <pre> tag. This script finds the <code> tag, extracts its content,
214+
// and replaces its parent <pre> tag with a new <div class="mermaid">.
215+
document.querySelectorAll('code.language-mermaid').forEach(function(codeElement) {
216+
const mermaidDiv = document.createElement('div');
217+
mermaidDiv.className = 'mermaid';
218+
mermaidDiv.textContent = codeElement.textContent; // Get the raw diagram definition
219+
220+
const preElement = codeElement.parentNode; // The <pre> tag is the parent of the <code> tag
221+
if (preElement && preElement.tagName === 'PRE') {
222+
preElement.parentNode.replaceChild(mermaidDiv, preElement);
223+
} else {
224+
// Fallback: if for some reason the parent isn't a <pre>, replace the code element itself
225+
codeElement.parentNode.replaceChild(mermaidDiv, codeElement);
226+
}
227+
});
228+
// Manually run Mermaid after transformations
229+
mermaid.run();
230+
});
231+
</script>
232+
{% endif %}
233+
199234
</body>
200235
</html>
Lines changed: 234 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,234 @@
1+
---
2+
title: "Kinematic Voxel Carving: A Framework for Procedural Mechanism Synthesis"
3+
layout: "post"
4+
date: 2025-11-24
5+
last_modified: 2025-11-24 10:00:00
6+
7+
category: creative_writing
8+
subcategory: "Generative Design"
9+
tags:
10+
- Optimization
11+
- Computational-Analysis
12+
- Mathematical-Modeling
13+
- Topology
14+
- Robotics
15+
- Technical-Report
16+
- Research-Paper
17+
- Full-Implementation
18+
- Future-Projections
19+
- Industry-Applications
20+
- Voxel-Based Topology Optimization
21+
- Kinematic Subtraction
22+
- Cellular Automata
23+
- Multigrid Approach
24+
- Gears
25+
- Mechanisms
26+
- 3D Printing
27+
- Generative Design
28+
- Computational Geometry
29+
keywords:
30+
- voxel carving
31+
- kinematic synthesis
32+
- procedural generation
33+
- 3D mechanisms
34+
- gears
35+
- cellular automata
36+
- topology optimization
37+
- print-in-place
38+
- digital fabrication
39+
- computational design
40+
- mechanical engineering
41+
42+
status: "stable"
43+
last_thought_date: 2025-11-24
44+
thought_generation: 1
45+
46+
difficulty_level: "advanced"
47+
reading_time_minutes: 6 # Estimated based on ~1500 words
48+
49+
document_type: "framework"
50+
thinking_style:
51+
- "analytical"
52+
- "mathematical"
53+
- "experimental"
54+
engagement_type: "analytical"
55+
reader_participation: "passive"
56+
cognitive_load: "intense"
57+
58+
# Discovery & SEO
59+
description: "A computational framework for generating 3D mechanical linkages like gears and kinematic couplings using voxel-based topology optimization and kinematic subtraction."
60+
excerpt: "This document outlines a novel computational framework for generating complex 3D mechanical linkages, such as gears and kinematic couplings, through Voxel-Based Topology Optimization. By simulating kinematic constraints within a discretized voxel grid, the system 'discovers' optimal mechanical shapes, enabling the creation of non-standard gears, print-in-place mechanisms, and organic linkages difficult to design with traditional CAD."
61+
featured_image: "/assets/images/constrained-voxel-gears.png"
62+
og_image: "/assets/images/constrained-voxel-gears-social.png"
63+
meta_title: "Kinematic Voxel Carving: Procedural Mechanism Synthesis Framework"
64+
meta_description: "Explore a framework for generating 3D mechanical gears and linkages using voxel-based topology optimization, kinematic subtraction, and cellular automata for digital fabrication."
65+
meta_keywords: "voxel carving, kinematic synthesis, procedural generation, 3D mechanisms, gears, cellular automata, topology optimization, print-in-place, digital fabrication, computational design, mechanical engineering"
66+
og_title: "Kinematic Voxel Carving: A Framework for Procedural Mechanism Synthesis"
67+
og_description: "Discover a novel approach to designing complex 3D mechanical linkages through simulated kinematic constraints and voxel-based topology optimization."
68+
og_type: "article"
69+
og_locale: "en_US"
70+
og_site_name: "Fractal Thought Engine"
71+
schema_type: "TechArticle"
72+
schema_headline: "Kinematic Voxel Carving: A Framework for Procedural Mechanism Synthesis"
73+
schema_author: "AI Assistant"
74+
schema_publisher: "Fractal Thought Engine"
75+
schema_date_published: 2025-11-24
76+
schema_date_modified: 2025-11-24
77+
schema_image: "/assets/images/constrained-voxel-gears-schema.png"
78+
schema_word_count: 1500
79+
schema_reading_time: "PT6M"
80+
canonical_url: "https://fractalthoughtengine.com/creative_writing/constrained-voxel-gears"
81+
robots: "index,follow"
82+
googlebot: "index,follow"
83+
bingbot: "index,follow"
84+
content_rating: "general"
85+
content_language: "en"
86+
geo_region: "Global"
87+
priority: 0.8
88+
changefreq: "monthly"
89+
sitemap_exclude: false
90+
search_exclude: false
91+
is_featured: true
92+
is_cornerstone: true
93+
is_gateway: true
94+
is_synthesis: true
95+
---
96+
97+
# Kinematic Voxel Carving: A Framework for Procedural Mechanism Synthesis
98+
99+
## 1. Abstract
100+
This document outlines a computational framework for generating 3D mechanical linkages—specifically gears and kinematic couplings—using **Voxel-Based Topology Optimization**. Unlike traditional CAD methods that rely on analytical geometry (e.g., involute curves), this system "discovers" optimal mechanical shapes by simulating the kinematic constraints of rotating or moving bodies within a discretized voxel grid.
101+
102+
By defining the motion paths and bounding volumes of two or more bodies, the system iteratively solves for a configuration where bodies maximize their volume without violating spatial constraints. This approach enables the creation of non-standard gears, print-in-place locking mechanisms, and complex organic linkages that are mathematically difficult to describe but physically functional.
103+
104+
---
105+
106+
## 2. Core Philosophy
107+
The central thesis of this engine is **Kinematic Subtraction over Time** combined with **Cellular Automata (CA) Smoothing**.
108+
109+
1. **Implicit Definition:** We do not draw teeth. We define *motion* and *volume*. The teeth are the emergent result of these definitions.
110+
2. **Resolution Agnostic:** The physics are solved at a coarse level first. High-fidelity details are only calculated where necessary (at the interface surfaces).
111+
3. **Structural Emergence:** Connectivity and structural integrity are enforced via local neighbor rules (CA), preventing "floating islands" of geometry.
112+
113+
---
114+
115+
## 3. System Architecture
116+
117+
### 3.1. The Body Definition
118+
A "Body" is a container for a voxel grid and its kinematic properties.
119+
* **Extent (Bounding Volume):** The maximum possible shape of the object (e.g., a cylinder, a cone, a torus, or an arbitrary mesh).
120+
* **Kinematic Frame:** A function $T(t)$ that returns a $4\times4$ transformation matrix (Rotation + Translation) for any given time $t$.
121+
* **Symmetry Constraints:** Rules defining required repetition (e.g., "Radial Symmetry: 8" implies that if voxel $V$ exists, $V_{rotated}$ must also exist).
122+
123+
### 3.2. The Voxel Grid
124+
Instead of a Cartesian grid or Octree, the system utilizes a **Cylindrical Voxel Grid** optimized for rotational bodies.
125+
* **Geometry:** Voxels are defined in cylindrical coordinates $(r, \theta, z)$. Each voxel is a "slice of cake" (a frustum of a sector) defined by a range for radius $r$, angle $\theta$, and height $z$.
126+
* **State:** Each voxel holds a state: `SOLID`, `EMPTY`, or `UNKNOWN` (during solving).
127+
* **Metadata:** Each voxel may store `FitnessScore` or `ConstraintViolationCount`.
128+
129+
---
130+
131+
## 4. The Solver Engine
132+
133+
The solver operates in a loop of **Constraint Application** and **Volume Optimization**.
134+
135+
### 4.1. The Constraint Matrix
136+
The fundamental rule is: *Two bodies cannot occupy the same point in World Space at the same time $t$.*
137+
138+
Let $V_A$ be a voxel in Body A and $V_B$ be a voxel in Body B.
139+
For a full rotation cycle $t \in [0, 360^\circ]$:
140+
1. Transform $V_A$ to World Space: $P_{world} = T_A(t) \cdot V_A$.
141+
2. Transform $P_{world}$ into Body B's local space: $P_B = T_B(t)^{-1} \cdot P_{world}$.
142+
3. If $P_B$ lands inside a voxel coordinate currently marked `SOLID` in Body B, a **Constraint Violation** is recorded.
143+
144+
### 4.2. Optimization Strategy (Maximally-Filled)
145+
We do not simply subtract B from A. We want *both* to be as large as possible to ensure strength.
146+
* **Heuristic:** If a collision occurs, which voxel do we delete?
147+
* **The "Center of Mass" Bias:** Voxels closer to the kinematic axis of their respective body are weighted higher. We prefer to delete voxels at the periphery (teeth tips) rather than the core (hub).
148+
* **Symmetry Enforcement:** If we delete voxel $V$, we must immediately delete all its symmetric counterparts to maintain balance.
149+
150+
### 4.3. Handling Locking and Interference
151+
* **Standard Gears:** The solver removes all collisions, resulting in smooth running.
152+
* **Locking Mechanisms:** If the user desires a lock (e.g., a ratchet), the kinematic definition includes a "Stop" phase. The solver will carve geometry that permits rotation up to a point, then physically collides (locks) because no valid subtraction exists to allow further movement without destroying the core volume.
153+
154+
---
155+
156+
## 5. Iterative Resolution & Refinement
157+
158+
To make this computationally feasible, we use a **Multigrid Approach**.
159+
160+
### Phase 1: Coarse Solve
161+
* **Grid Size:** Low (e.g., $32^3$ voxels).
162+
* **Action:** Solve the kinematic constraints.
163+
* **Result:** Blocky, Minecraft-like gears that roughly mesh.
164+
165+
### Phase 2: Boundary Detection
166+
* Identify **Surface Voxels**: Any `SOLID` voxel adjacent to an `EMPTY` voxel.
167+
* Identify **Interaction Zones**: Any voxel in Body A that comes within distance $D$ of Body B during the rotation cycle.
168+
* **Optimization:** We *only* care about these zones. The internal volume of the gear is static.
169+
170+
### Phase 3: Sub-division (Refinement)
171+
* Subdivide the Surface Voxels into $2 \times 2 \times 2$ smaller voxels.
172+
* Re-run the Constraint Solver *only* on these new smaller voxels.
173+
* Repeat this process until the desired physical resolution (e.g., 0.1mm for 3D printing) is reached.
174+
175+
---
176+
177+
## 6. Cellular Automata (CA) & Structural Integrity
178+
179+
Raw kinematic subtraction often leaves "floating islands" (debris) or impossibly thin connections. We solve this using **Voxel Neighborhood Fitness Functions** akin to Cellular Automata rules.
180+
181+
**The "Life" Rules for Mechanical Voxels:**
182+
After every constraint pass, run a CA simulation:
183+
184+
1. **The Island Rule:** If a voxel has 0 neighbors, it dies (becomes `EMPTY`).
185+
2. **The Strut Rule:** If a voxel has only 1 neighbor, it is structurally weak. It either dies (pruning) or triggers a "growth" event to connect to a nearby solid (reinforcement), depending on user settings.
186+
3. **The Smoothing Rule:** If an `EMPTY` voxel is surrounded by $\ge 6$ `SOLID` neighbors, it becomes `SOLID` (filling internal voids).
187+
4. **The Axis Anchor:** Voxels touching the central rotation axis are immutable (infinite fitness). Connectivity is traced from the axis outward. Any voxel not connected to the axis via a chain of neighbors is culled.
188+
189+
---
190+
191+
## 7. Potential Applications
192+
193+
This engine allows for the generation of mechanisms that are difficult to design in CAD:
194+
195+
1. **Non-Parallel Axis Gears:**
196+
* Simply define Axis A as vertical and Axis B as tilted $45^\circ$. The solver will naturally carve **Hypoid** or **Bevel** geometries without the user needing to know the complex math.
197+
2. **Variable Ratio Gears:**
198+
* Define the rotation speed of Body A as constant, and Body B as a sine wave. The system will generate **Non-Circular Gears** (elliptical/nautilus gears).
199+
3. **Print-in-Place Assemblies:**
200+
* Define a "gap tolerance" (e.g., 2 voxels). The solver ensures that even at the tightest mesh point, there is a physical gap, allowing the mechanism to be printed pre-assembled and fused, then broken free.
201+
4. **Internal/Cavity Gears:**
202+
* Body A is a sphere, Body B is a star shape inside it. The system generates a 3D internal track mechanism.
203+
204+
---
205+
206+
## 8. Implementation Roadmap
207+
208+
### Step 1: The Data Structure
209+
* Implement a cylindrical voxel grid class.
210+
* Implement basic geometric primitives (Cylinder, Cube) to populate the grid.
211+
212+
### Step 2: The Kinematic Loop
213+
* Implement the "Time Step" loop.
214+
* Implement Matrix transformations for voxels.
215+
* Create a visualizer (Point cloud or basic mesh) to debug the "Swept Volume."
216+
217+
### Step 3: The Constraint Solver (Coarse)
218+
* Implement the collision detection logic.
219+
* Implement the "Delete" logic (Boolean subtraction).
220+
* Implement Symmetry mirroring.
221+
222+
### Step 4: The CA Post-Processor
223+
* Implement the "Flood Fill" algorithm to detect disconnected islands.
224+
* Implement the neighbor-count pruning rules.
225+
226+
### Step 5: Refinement & Meshing
227+
* Implement the Cylindrical subdivision for boundary voxels (splitting $r, \theta, z$).
228+
* Implement **Dual Contouring** or **Marching Cubes** to convert the final voxel state into an STL/OBJ file.
229+
* Add Laplacian Smoothing to the final mesh to remove "voxel stepping" artifacts.
230+
231+
---
232+
233+
## 9. Conclusion
234+
This document describes a generative design engine that trades analytical precision for simulation-based robustness. By treating mechanical design as a space-time constraint problem, we can automate the creation of complex, functional, and novel mechanisms ready for digital fabrication.

0 commit comments

Comments
 (0)