Claude-skill-registry Implement Dynamic Dilation
Create interactive dilation animations using p5.js where students explore dilations with adjustable scale factors.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/implement-dynamic-dilation" ~/.claude/skills/majiayu000-claude-skill-registry-implement-dynamic-dilation && rm -rf "$T"
manifest:
skills/data/implement-dynamic-dilation/SKILL.mdsource content
Implement Dynamic Dilation
Use this skill when creating animations where students:
- Explore dilations centered at a point with interactive scale factors
- Understand how scale factors affect shape size and position
- Compare original and dilated figures
- Visualize dilation rays from center to vertices
When to Use This Pattern
Perfect for:
- "Show the dilation of polygon ABCD centered at point O with scale factor 2"
- Interactive exploration of scale factors (including fractions)
- Comparing original and dilated figures
- Understanding similarity through transformations
- Showing dilation rays and transformation paths
Not suitable for:
- Static dilation diagrams (use basic p5 animation)
- Rotations or reflections (different transformation types)
- Non-rigid transformations
Technology Stack
Uses p5.js for the interactive coordinate plane because:
- Real-time interactive slider control
- Dynamic rendering of dilated shapes
- Built-in animation and mouse/keyboard handling
- Easy geometric calculations
Configuration Options
Basic Configuration (from dilation.ts)
// ========================================== // CONFIGURATION - Easily modifiable // ========================================== // Polygon vertices (any shape) let points = [ { x: 10, y: 10, label: 'P' }, { x: 8, y: 8, label: 'Q' }, { x: 12, y: 6, label: 'R' }, { x: 14, y: 8, label: 'S' } ]; // Center of dilation let center = { x: 10, y: 8, label: 'O' }; // Scale factors available let scaleFactors = [ { value: 1/3, label: '1/3' }, { value: 1/2, label: '1/2' }, { value: 1, label: '1' }, { value: 2, label: '2' }, { value: 3, label: '3' }, { value: 4, label: '4' } ]; // Current scale factor index let scaleIndex = 3; // Start at scale factor 2 // Toggle for showing dilation rays let showRays = true; // Toggle for showing grid and axes let showGrid = true; // Axis ranges let xMin = 0, xMax = 20; let yMin = 0, yMax = 15; // Colors let originalColor = [59, 130, 246]; // Blue let dilatedColor = [239, 68, 68]; // Red let gridColor = 220; let axisColor = 100;
Features
Interactive Controls
- Slider Control: Click/drag slider to change scale factor
- Keyboard Controls:
- Arrow keys (left/right) to adjust scale factor
- R to reset to scale factor 1
- D to toggle dilation rays on/off
- G to toggle grid and axes on/off
Visual Elements
- Coordinate grid with customizable axis ranges
- Original polygon (blue) with vertex labels
- Dilated polygon (red) with primed labels (e.g., P')
- Dilation rays (black dotted lines) extending from center through vertices
- Center point marked with a black dot and label
- Interactive slider with scale factor indicators
- Legend showing original, dilated, and center
- Toggle status showing current state of rays and grid
Core Functions
Coordinate Transformation
function coordToPixel(x, y, plotWidth, plotHeight) { let px = padding.left + ((x - xMin) / (xMax - xMin)) * plotWidth; let py = padding.top + ((yMax - y) / (yMax - yMin)) * plotHeight; return { x: px, y: py }; }
Dilation Calculation
// Calculate dilated points let dilatedPoints = points.map(p => ({ x: center.x + (p.x - center.x) * scaleFactor, y: center.y + (p.y - center.y) * scaleFactor, label: p.label + "'" }));
Drawing Dilation Rays
// Draw dilation rays (from center, extending outward) if (showRays) { stroke(0); strokeWeight(2); drawingContext.setLineDash([4, 4]); for (let i = 0; i < points.length; i++) { let centerPixelPos = coordToPixel(center.x, center.y, plotWidth, plotHeight); let pointPixel = coordToPixel(points[i].x, points[i].y, plotWidth, plotHeight); // Calculate direction vector let dx = pointPixel.x - centerPixelPos.x; let dy = pointPixel.y - centerPixelPos.y; // Ray starts at center and extends far in the direction of the point let scale = 1000; let x2 = centerPixelPos.x + dx * scale; let y2 = centerPixelPos.y + dy * scale; line(centerPixelPos.x, centerPixelPos.y, x2, y2); } drawingContext.setLineDash([]); }
Common Patterns
Pattern 1: Simple Quadrilateral Dilation
let points = [ { x: 2, y: 2, label: 'A' }, { x: 4, y: 2, label: 'B' }, { x: 4, y: 4, label: 'C' }, { x: 2, y: 4, label: 'D' } ]; let center = { x: 0, y: 0, label: 'O' }; let scaleFactors = [ { value: 1/2, label: '1/2' }, { value: 1, label: '1' }, { value: 2, label: '2' }, { value: 3, label: '3' } ];
Pattern 2: Triangle Dilation (Center at Vertex)
let points = [ { x: 2, y: 8, label: 'A' }, { x: 2, y: 4, label: 'B' }, { x: 6, y: 4, label: 'C' } ]; let center = { x: 6, y: 4, label: 'C' }; // Center at vertex C let scaleFactors = [ { value: 1/2, label: '1/2' }, { value: 1, label: '1' }, { value: 2, label: '2' }, { value: 3, label: '3' } ];
Pattern 3: Dilation with Negative Coordinates
let points = [ { x: 0, y: 0, label: 'A' }, { x: 2, y: 2, label: 'B' }, { x: 6, y: 1, label: 'C' }, { x: 4, y: -1, label: 'D' } ]; let center = { x: 4, y: -1, label: 'O' }; // Adjust axis ranges to accommodate negative values let xMin = -5, xMax = 25; let yMin = -10, yMax = 15;
Customization Points
1. Polygon Shape
Modify the
points array to create any polygon. Points should be in order to form a closed shape.
2. Center of Dilation
Set
center to any point. Common choices:
- Origin (0, 0)
- One of the polygon vertices
- A point inside the polygon
- A point outside the polygon
3. Scale Factors
Customize the
scaleFactors array with any positive values:
- Fractions (e.g., 1/3, 1/2) for reductions
- Whole numbers (e.g., 2, 3, 4) for enlargements
- Include 1 to show the original shape
4. Axis Ranges
Adjust
xMin, xMax, yMin, yMax to fit your shape and dilations.
5. Colors
Customize colors for:
: Color of the original polygonoriginalColor
: Color of the dilated polygondilatedColor
: Color of grid linesgridColor
: Color of coordinate axesaxisColor
6. Default States
: Starting scale factor (index in scaleFactors array)scaleIndex
: Whether to show dilation rays by defaultshowRays
: Whether to show grid by defaultshowGrid
Implementation Checklist
- Copied base dilation animation code
- Updated
array for target polygonpoints - Set
coordinates and labelcenter - Configured
arrayscaleFactors - Adjusted axis ranges (
,xMin
,xMax
,yMin
)yMax - Customized colors if needed
- Set appropriate default scale factor index
- Tested slider interaction
- Tested keyboard controls (arrows, R, D, G)
- Verified dilation rays extend correctly
- Verified polygon labels (original and dilated)
- Checked that dilations calculate correctly
- Tested grid toggle
- Tested rays toggle
Tips
- Vertex Order: List points in order (clockwise or counter-clockwise) for proper polygon rendering
- Axis Range: Ensure axis ranges accommodate both original and largest dilated figure
- Center Choice: Different centers create different visual effects - experiment!
- Scale Factor 1: Always include scale factor 1 to show original/dilated overlap
- Labels: Use single letters (A, B, C...) for clean vertex labels
- Grid Spacing: Adjust grid scale if coordinates are very large or very small
- Ray Visibility: Rays help visualize the transformation direction
- Color Contrast: Use contrasting colors for original vs dilated polygons
Limitations & Notes
- Canvas Size: Always use 600x600 as specified in p5-format.md
- Positive Scale Factors Only: No negative scale factors (would flip the figure)
- No Animation: Scale changes are instant, not animated
- Simple Polygons: Works best with convex polygons, may have visual issues with complex self-intersecting shapes
Educational Applications
-
Understanding Scale Factors:
- Scale factor > 1 → enlargement
- Scale factor < 1 → reduction
- Scale factor = 1 → same size
-
Similarity: Dilations preserve shape (angles) but change size (side lengths)
-
Center Effects: Explore how center location affects the dilated figure's position
-
Coordinate Relationships: See how each coordinate changes based on center and scale factor
Related Animation Types
- implement-dynamic-graph-question - For coordinate plane line drawing
- Other geometry animations (rotations, reflections) - To be added
File Location
Base implementation: src/app/animations/examples/geometry/dilation.ts
Example Usage in create-p5-animation Skill
When asked to create a dilation animation:
- Use this animation-type as the scaffold
- Modify the configuration section for the specific problem
- Keep all the core functionality (slider, toggles, rendering)
- Adjust only the configurable parameters