Islamic Star Patterns From Polygon Contact
A polygon-contact construction study with ray geometry, intersection tests, strapwork hierarchy, cultural provenance, accessible diagrams, and material proof.
Islamic star patterns belong to many regions, periods, materials, buildings, books, and workshops; they are not one universal algorithm. A polygon-contact construction can illuminate how rays meet into stars and interlaced networks, but it should travel with provenance and avoid presenting every geometric field as a recovered historical method.
This study builds one inspectable construction: choose a tiling of contact polygons, emit angled rays from edge contacts, intersect compatible pairs, validate gaps and collisions, then compose a contemporary explanatory edition without erasing its sources.
Islamic star patterns require a provenance layer
Start with the object or tradition being studied: region, approximate date, medium, current collection or site, source URL, pattern family, and what is known or uncertain about construction. Do not call a generated eight-point star “Islamic” only because it uses rotational symmetry. The term carries cultural history, not just geometry.
The Metropolitan Museum's essay on geometric patterns in Islamic art introduces recurring forms and their cultural contexts across media. Use object records and scholarship to make specific comparisons. Islamic star patterns can inspire contemporary work while captions distinguish study, reconstruction, adaptation, and invention.
For this worked fixture, the geometric source is a square-and-octagon contact tiling, not a claim about one historic panel. Record the polygons, contacts, ray angles, and resulting network. The phrase polygons-in-contact describes the generative substrate: neighboring cells share edges or vertices from which construction rays can enter the tile interiors. Cultural attribution and algorithmic provenance remain parallel parts of the receipt.
- Contact rays resolve into an eight-point star
- Construction logic
- Interpretive outcome
Choose a contact tiling before drawing stars
A contact tiling supplies the scaffolding: regular or irregular polygons arranged without unintended gaps or overlaps. Store tile ID, polygon type, ordered vertices, neighbors, shared edge or contact point, transform, and source family. Validate winding, area, edge incidence, and boundary before emitting decorative geometry. A weak substrate produces seams no ray-angle tweak can repair.
The Kaplan and Salesin paper presents a computational method for generating Islamic star patterns. Read the paper's actual scope and terminology before implementing a simplified Hankin construction. The essential digital discipline is to make construction parameters visible, not to imply that one algorithm explains the historical diversity of the art.
Compare a square-octagon field, a hexagonal field, and one less regular contact layout as separate studies. Keep cell scale, stroke, and page constant. Islamic star patterns should reveal how the substrate changes star order, rhythm, and negative space. Constraint-based layout offers a useful mindset: required contacts and non-overlap are hard constraints, while compositional balance can remain a softer choice layered above them.
Runnable artifact: The intersection fixture verifies crossing rays, parallel rejection, symmetry, exact gaps, near-gap thresholds, finite intersections, and deterministic geometry. Extend it with segment bounds and polygon ownership.
Save this worked fixture as polygon-contact-rays.test.mjs and run node polygon-contact-rays.test.mjs. Expected final line: PASS: 10 strapwork assertions.
import assert from "node:assert/strict";
function intersect(a,b,c,d){const det=(a[0]-b[0])*(c[1]-d[1])-(a[1]-b[1])*(c[0]-d[0]);if(Math.abs(det)<1e-9)return null;const t=((a[0]-c[0])*(c[1]-d[1])-(a[1]-c[1])*(c[0]-d[0]))/det;return [a[0]+t*(b[0]-a[0]),a[1]+t*(b[1]-a[1])]}
const gap=(a,b)=>Math.hypot(a[0]-b[0],a[1]-b[1]);let n=0;const check=fn=>{fn();n++};
check(()=>assert.deepEqual(intersect([0,0],[2,2],[0,2],[2,0]),[1,1]));
check(()=>assert.equal(intersect([0,0],[2,0],[0,1],[2,1]),null));
check(()=>assert.equal(gap([0,0],[3,4]),5));
check(()=>assert.equal(gap([1,1],[1,1]),0));
check(()=>assert.ok(intersect([0,0],[1,2],[0,2],[2,0]).every(Number.isFinite)));
check(()=>assert.deepEqual(intersect([0,2],[2,0],[0,0],[2,2]),[1,1]));
check(()=>assert.equal(intersect([0,0],[0,2],[1,0],[1,2]),null));
check(()=>assert.ok(gap([0,0],[.01,0])<.02));
check(()=>assert.deepEqual(intersect([0,0],[2,2],[0,2],[2,0]),intersect([0,0],[2,2],[0,2],[2,0])));
check(()=>assert.ok(gap([-1,-1],[1,1])>2));
assert.equal(n,10);console.log("PASS: 10 strapwork assertions");
Emit rays with a complete local frame
At each eligible edge contact, define tangent direction, inward normal, emission angle, ray origin, maximum length, tile ownership, and paired contact. “Thirty degrees” is meaningless without stating whether it is measured from edge or normal and which side points inward. Test transformed copies so rotation and reflection preserve the intended local rule.
Intersect rays inside the owning polygon or agreed neighboring region. Choose the nearest valid forward intersection under parameter (t>0), reject parallel and nearly parallel pairs, and preserve unmatched rays as explicit failures. The full Kaplan thesis provides deeper context for computational construction and design space. A local implementation should state which algorithmic subset it follows.
The fixture below tests infinite-line intersections; production code must additionally confirm segment range, polygon containment, contact compatibility, and duplicate vertices. Islamic star patterns gain rigor when every finished vertex identifies its two source rays and every ray identifies its contact edge. Then a gap can be traced back to geometry instead of patched by moving the rendered path.
| Layer | Invariant | Failure example | Repair |
|---|---|---|---|
| Contact tiling | paired edges | gap/overlap | fix substrate |
| Rays | inward + bounded | wrong normal | fix local frame |
| Network | valid intersections | parallel/open end | adjust rule |
| Strapwork | clearance + crossings | band collision | change width |
Turn the line network into strapwork carefully
Once the centerline network validates, offset it into bands or draw a consistent stroke. At crossings, decide over-under alternation, breaks, outlines, and join style. Alternation must remain consistent around cycles; a local crossing choice can create a contradiction later. Keep the centerline control visible in the design file so band styling never becomes the only source.
Geometric strapwork has material implications. Carved stone, cut tile, painted manuscript, wood lattice, and screen SVG do not share the same band width, joint, relief, or color logic. If the edition studies a specific object, observe its material transitions instead of applying a generic woven effect. If it is contemporary, say so and choose a fabrication logic that belongs to the chosen medium.
Truchet tile composition also joins local path fragments into global networks. Compare its tile-by-tile connectivity with contact-ray intersections here. Wave function collapse patterns can arrange compatible modules, but it should not replace the geometric provenance of a pattern being analyzed. Combining methods is valid when the receipt makes each layer and its cultural claim explicit.
- 1Record source
Identify object, region, date, material, collection, scholarship, and uncertainty.
- 2Build substrate
Validate contact polygons, neighbors, scale, boundary, and transformations.
- 3Resolve network
Emit rays, intersect, classify gaps, assign cycles, and preserve centerlines.
- 4Compose material
Set band, crossings, palette, hierarchy, accessibility, fabrication, and proof.
The marked proof sheet is treated as a companion image rather than backstage debris: open rays and near-collisions explain exactly where construction choices carry risk.
Measure gaps, collisions, and symmetry as different facts
At each intended join, calculate endpoint gap. At unrelated segments, calculate minimum clearance and flag collisions. At crossings, verify a declared crossing node rather than treating all segment intersections as errors.
Measure rotational or reflection residual only for symmetries the substrate promises. A hand-made source can contain variation that should be observed, not “corrected” to machine perfection.
The artifact's ray intersection and distance checks are seeds for this ledger. Add coverage for every contact, open-ray count, duplicate nodes, segment outside polygon, band self-intersection, cycle continuity, and over-under alternation. Islamic star patterns should publish worst residuals and a marked proof sheet. A single pass badge hides where the construction is closest to failure.
For a star-pattern tiling, seam tests must include the page repeat or panel boundary. A valid internal network can break where tiles or exports repeat. Compare left/right and top/bottom edge events under the intended translation, rotation, or reflection.
If the piece is a finite medallion rather than a repeat, terminate rays and bands intentionally with a border. An arbitrary crop through half a star reads as damage unless the composition clearly claims interruption.
Compose hierarchy without flattening the network
Use line or band roles for primary stars, secondary polygons, construction marks, and border. Limit color so geometry remains legible. A contemporary explanatory poster might show finished band in dark ink, contact polygons in a pale tone, and construction rays in one accent. A decorative edition may hide the construction but should archive it beside the work.
Type needs a quiet panel or border rather than filling every star center. Align baselines to the page or frame, not indiscriminately to diagonal rays. Islamic star patterns can support asymmetrical editorial layouts when the geometry is allowed to extend beyond one edge with intentional continuation. Preserve a complete motif elsewhere so the crop reads as choice.
Accessibility text should state the polygon field, dominant star order, symmetry, band behavior, palette, border, and provenance. Provide a construction diagram and parameter table, not a DOM node for every segment. Reduced-motion versions of ray animations should show manual steps or a final still. No one should need animation, color, or mathematical vocabulary to understand the main relationship from contacts to star network.
Proof the chosen medium and publish uncertainty
For SVG, normalize transforms, joins, clipping, IDs, titles, descriptions, path bytes, and mobile performance. For plotting or cutting, test band clearance, pen or kerf width, path order, corner speed, and material bridges. Pen plotter hatching supplies a production-led approach: a one-to-one strip often teaches more than another screen render. For print, inspect registration, knockout, line gain, trim, and the border seam.
Publish the source notes, contact tiling, local ray frame, angle, intersection policy, tolerances, open-ray and collision report, symmetry residual, centerline network, band rules, crossing cycle, crop, palette, output, accessibility description, and physical proof. Separate facts learned from scholarship, construction hypotheses, and contemporary inventions. That separation is a sign of respect, not a weakness.
Reject a piece with vague attribution, broken contacts, patched gaps, contradictory crossings, unsupported historical claims, inaccessible motion, or a fabrication width below tolerance. The successful edition lets the viewer experience a coherent field while still finding the method and lineage nearby. Islamic star patterns are powerful because geometry, craft, devotion, architecture, and regional history meet in specific objects; a computational study should open that specificity rather than compress it into an anonymous pattern generator.