Claude Code Plugins

Community-maintained marketplace

Feedback

Implement Dynamic Dilation

@asmith7013/coachingPlatform
0
0

Create interactive dilation animations using p5.js where students explore dilations with adjustable scale factors.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name Implement Dynamic Dilation
description Create interactive dilation animations using p5.js where students explore dilations with adjustable scale factors.

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

  1. Slider Control: Click/drag slider to change scale factor
  2. 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:

  • originalColor: Color of the original polygon
  • dilatedColor: Color of the dilated polygon
  • gridColor: Color of grid lines
  • axisColor: Color of coordinate axes

6. Default States

  • scaleIndex: Starting scale factor (index in scaleFactors array)
  • showRays: Whether to show dilation rays by default
  • showGrid: Whether to show grid by default

Implementation Checklist

  • Copied base dilation animation code
  • Updated points array for target polygon
  • Set center coordinates and label
  • Configured scaleFactors array
  • 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

  1. Vertex Order: List points in order (clockwise or counter-clockwise) for proper polygon rendering
  2. Axis Range: Ensure axis ranges accommodate both original and largest dilated figure
  3. Center Choice: Different centers create different visual effects - experiment!
  4. Scale Factor 1: Always include scale factor 1 to show original/dilated overlap
  5. Labels: Use single letters (A, B, C...) for clean vertex labels
  6. Grid Spacing: Adjust grid scale if coordinates are very large or very small
  7. Ray Visibility: Rays help visualize the transformation direction
  8. 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

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:

  1. Use this animation-type as the scaffold
  2. Modify the configuration section for the specific problem
  3. Keep all the core functionality (slider, toggles, rendering)
  4. Adjust only the configurable parameters