The pages are in English; this contents, the search and the buttons are in Japanese.
Gallery: curling
The sheet from World Curling's and Curling Canada's rules, its display ranges and house colours, the board and the badge, and the stones of an end with their score worked out. The pictures share one stylesheet, which is left out of each one's SVG here; drawKyogijo puts it in every drawing unless style: "none" says not to.
The sheet#
sport: "curling": tall by default, with the far house at the top; orientation: "landscape" lays it wide.
The sheet, tall
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling" });
The sheet, wide
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", orientation: "landscape" });
World Curling, with its hack and courtesy lines
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", orientation: "landscape", league: "wcf", detail: "full" });
Curling Canada's rules
Curling Canada sheet Drawn as: a curling sheet, 150 by 15.58 feet, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks.
Its book prints no hack line and no courtesy line.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", orientation: "landscape", league: "curling-canada" });
The shortest sheet and the narrowest
Curling Canada sheet Drawn as: a curling sheet, 146 by 14.17 feet, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks.
146 feet by 14 feet 2 inches, the least Curling Canada allows.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({
sport: "curling",
orientation: "landscape",
league: "curling-canada",
sheet: { length: 146, width: 14.166666666666666 },
});
Colours, ice and guard zone#
sheet sets the colours of the rings, the ice's pebble and the shading of the free guard zone.
Rings in a club's colours
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({
sport: "curling",
sheet: {
rings: { outer: "#0b6e4f", middle: "#ffffff", inner: "#d4a017", button: "#ffffff" },
pebble: true,
},
});
The free guard zone
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", orientation: "landscape", sheet: { guardZone: true } });
The sheet, dark
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", theme: "dark" });
Part of the sheet#
sheet.show is half (the hog line to the back line) or house, at the left end (the top of a tall drawing) or the right.
Hog line to back line
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", sheet: { show: "half", guardZone: true } });
The house
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", sheet: { show: "house", pebble: true } });
The house at the right end, wide
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", orientation: "landscape", sheet: { show: "house", end: "right" } });
The top end, the bottom end, both folded#
sheet.show: "folded" is the whole sheet as a strip with its two houses enlarged beside it, so that a sheet 150 feet long fills a square. end: "top" or "bottom" is one end alone.
Folded, tall: the top house on the left, the bottom house on the right
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Shown folded: the whole sheet is in the middle, with its top house enlarged on the left and its bottom house enlarged on the right. Each enlarged part runs from the hog line to the back line. Top house Bottom house
The strip keeps its scale; each panel is the same sheet from the hog line to the back line, enlarged, with a fan to the part it shows.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", sheet: { show: "folded" } });
Folded, wide: the left house above, the right house below
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Shown folded: the whole sheet is in the middle, with its left house enlarged above it and its right house enlarged below it. Each enlarged part runs from the hog line to the back line. Left house Right house
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", orientation: "landscape", sheet: { show: "folded" } });
Folded, with only the houses
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Shown folded: the whole sheet is in the middle, with its top house enlarged on the left and its bottom house enlarged on the right. Each enlarged part is the house. Top house Bottom house
`panels: "house"`; the free guard zone is shaded on the strip.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", sheet: { show: "folded", panels: "house", guardZone: true } });
Folded, a little wider than tall
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Shown folded: the whole sheet is in the middle, with its top house enlarged on the left and its bottom house enlarged on the right. Each enlarged part runs from the hog line to the back line. Top house Bottom house
`fit` is width over height; a panel is never longer than the strip.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", sheet: { show: "folded", fit: 1.2, pebble: true } });
Folded, dark, in Curling Canada's rules
Curling Canada sheet Drawn as: a curling sheet, 150 by 15.58 feet, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Shown folded: the whole sheet is in the middle, with its top house enlarged on the left and its bottom house enlarged on the right. Each enlarged part runs from the hog line to the back line. Top house Bottom house
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", league: "curling-canada", theme: "dark", sheet: { show: "folded" } });
Only the top end
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", sheet: { show: "half", end: "top", guardZone: true } });
Only the bottom end
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({ sport: "curling", sheet: { show: "half", end: "bottom", guardZone: true } });
The stones of an end, folded
Curling stones, End 6 Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Shown folded: the whole sheet is in the middle, with its top house enlarged on the left and its bottom house enlarged on the right. Each enlarged part runs from the hog line to the back line. Data is drawn in the enlarged parts as well. Data: 1 Shot rock. By outcome: shot-rock 1. 2 Counting stone. By outcome: counting 2. 6 Stone. 6 stones. By outcome: stone 4, shot-rock 1, counting 1. By team: home 3, away 3. Values from 0.5 to 14. 6 Stone. 1 Shot rock By outcome: shot-rock 1. 2 Counting stone By outcome: counting 2. 6 Stone 6 stones By outcome: stone 4, shot-rock 1, counting 1. By team: home 3, away 3. Values from 0.5 to 14. home 8: 0.5 ft from the button, the shot rock home 6: 1.44 ft from the button, counting away 7: 2.2 ft from the button away 5: 3.82 ft from the button away 3: 9 ft from the button home 2: 14 ft from the button 6 Stone 8 6 7 5 3 2 1 Shot rock By outcome: shot-rock 1. 2 Counting stone By outcome: counting 2. 6 Stone 6 stones By outcome: stone 4, shot-rock 1, counting 1. By team: home 3, away 3. Values from 0.5 to 14. home 8: 0.5 ft from the button, the shot rock home 6: 1.44 ft from the button, counting away 7: 2.2 ft from the button away 5: 3.82 ft from the button away 3: 9 ft from the button home 2: 14 ft from the button 6 Stone 8 6 7 5 3 2 1 Shot rock By outcome: shot-rock 1. 2 Counting stone By outcome: counting 2. 6 Stone 6 stones By outcome: stone 4, shot-rock 1, counting 1. By team: home 3, away 3. Values from 0.5 to 14. home 8: 0.5 ft from the button, the shot rock home 6: 1.44 ft from the button, counting away 7: 2.2 ft from the button away 5: 3.82 ft from the button away 3: 9 ft from the button home 2: 14 ft from the button 6 Stone 8 6 7 5 3 2 Top house Bottom house
The stones are in the strip, small, and in the top panel, large, at the house they were played to.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { curlingStones } from "@johnmorrisdotca/kyogijo-stadiums/charts";
const stones = [
{ x: 0.4, y: 0.3, team: "home", number: 8 },
{ x: -1.2, y: -0.8, team: "home", number: 6 },
{ x: 1.9, y: 1.1, team: "away", number: 7 },
{ x: -2.6, y: 2.8, team: "away", number: 5 },
{ x: 0.2, y: -9, team: "away", number: 3 },
{ x: 0.1, y: -14, team: "home", number: 2 },
];
const chart = curlingStones(stones, { end: 6, hammer: "home", show: "folded" });
const svg = chart.draw();
The same end, folded wide, with its key
Curling stones, End 6 Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Shown folded: the whole sheet is in the middle, with its left house enlarged above it and its right house enlarged below it. Each enlarged part runs from the hog line to the back line. Data is drawn in the enlarged parts as well. Data: 1 Shot rock. By outcome: shot-rock 1. 2 Counting stone. By outcome: counting 2. 6 Stone. 6 stones. By outcome: stone 4, shot-rock 1, counting 1. By team: home 3, away 3. Values from 0.5 to 14. 6 Stone. Key. Stone, Counting stone, Shot rock Key. 1 Shot rock By outcome: shot-rock 1. 2 Counting stone By outcome: counting 2. 6 Stone 6 stones By outcome: stone 4, shot-rock 1, counting 1. By team: home 3, away 3. Values from 0.5 to 14. home 8: 0.5 ft from the button, the shot rock home 6: 1.44 ft from the button, counting away 7: 2.2 ft from the button away 5: 3.82 ft from the button away 3: 9 ft from the button home 2: 14 ft from the button 6 Stone 8 6 7 5 3 2 Key Stone, Counting stone, Shot rock Key Stone Counting stone Shot rock 1 Shot rock By outcome: shot-rock 1. 2 Counting stone By outcome: counting 2. 6 Stone 6 stones By outcome: stone 4, shot-rock 1, counting 1. By team: home 3, away 3. Values from 0.5 to 14. home 8: 0.5 ft from the button, the shot rock home 6: 1.44 ft from the button, counting away 7: 2.2 ft from the button away 5: 3.82 ft from the button away 3: 9 ft from the button home 2: 14 ft from the button 6 Stone 8 6 7 5 3 2 Key Stone, Counting stone, Shot rock Key Stone Counting stone Shot rock 1 Shot rock By outcome: shot-rock 1. 2 Counting stone By outcome: counting 2. 6 Stone 6 stones By outcome: stone 4, shot-rock 1, counting 1. By team: home 3, away 3. Values from 0.5 to 14. home 8: 0.5 ft from the button, the shot rock home 6: 1.44 ft from the button, counting away 7: 2.2 ft from the button away 5: 3.82 ft from the button away 3: 9 ft from the button home 2: 14 ft from the button 6 Stone 8 6 7 5 3 2 Key Stone, Counting stone, Shot rock Key Stone Counting stone Shot rock Left house Right house
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { curlingStones } from "@johnmorrisdotca/kyogijo-stadiums/charts";
const stones = [
{ x: 0.4, y: 0.3, team: "home", number: 8 },
{ x: -1.2, y: -0.8, team: "home", number: 6 },
{ x: 1.9, y: 1.1, team: "away", number: 7 },
{ x: -2.6, y: 2.8, team: "away", number: 5 },
{ x: 0.2, y: -9, team: "away", number: 3 },
{ x: 0.1, y: -14, team: "home", number: 2 },
];
const chart = curlingStones(stones, { end: 6, hammer: "home", show: "folded" });
const svg = chart.draw({ orientation: "landscape" });
Where the stones of many ends came to rest#
curlingHeat counts the stones of many ends into cells, hexagons, a density or the zones of the house, or draws each as a translucent disc in its team's colour; it can keep one team's stones, the free guards or the stones in the house.
Cells, the half of the sheet
Where the stones came to rest Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: Heat map of 240 Stones. Stones in 80 cells, from 1 to 11. Highest: -0.5, -0.5 (11), -1.5, 0.5 (10), -0.5, 0.5 (9). Heat map of 240 Stones Stones in 80 cells, from 1 to 11. Highest: -0.5, -0.5 (11), -1.5, 0.5 (10), -0.5, 0.5 (9). Legend: Stones Stones 2.5 5 7.5 10
A cell is a foot square; a cell with no stone is not drawn.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { curlingHeat } from "@johnmorrisdotca/kyogijo-stadiums/charts";
const luck = (n) => {
const v = Math.sin(n * 12.9898) * 43758.5453;
return v - Math.floor(v);
};
const bell = (n) => luck(n) + luck(n + 1) + luck(n + 2) - 1.5;
const stones = Array.from({ length: 240 }, (_, i) => {
const inHouse = luck(i * 7) < 0.45;
return { x: bell(i * 5) * (inHouse ? 3 : 2.5), y: inHouse ? bell(i * 11) * 3 : -8 - 9 * luck(i * 13), team: i % 2 ? "home" : "away" };
});
const svg = curlingHeat(stones).draw();
Hexagons, wide
Where the stones came to rest Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: Hexagon map of 240 Stones. Stones in 31 hexagons, from 1 to 24. Highest: 0.6, -13.2 (24), -1.2, 0.3 (24), 0.6, 1.4 (18). Hexagon map of 240 Stones Stones in 31 hexagons, from 1 to 24. Highest: 0.6, -13.2 (24), -1.2, 0.3 (24), 0.6, 1.4 (18). Legend: Stones Stones 5 10 15 20
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { curlingHeat } from "@johnmorrisdotca/kyogijo-stadiums/charts";
const luck = (n) => {
const v = Math.sin(n * 12.9898) * 43758.5453;
return v - Math.floor(v);
};
const bell = (n) => luck(n) + luck(n + 1) + luck(n + 2) - 1.5;
const stones = Array.from({ length: 240 }, (_, i) => {
const inHouse = luck(i * 7) < 0.45;
return { x: bell(i * 5) * (inHouse ? 3 : 2.5), y: inHouse ? bell(i * 11) * 3 : -8 - 9 * luck(i * 13), team: i % 2 ? "home" : "away" };
});
const svg = curlingHeat(stones, { view: "hexbin", cell: 1.2 }).draw({ orientation: "landscape" });
A density, one team, wide
Where the stones came to rest Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: Density contours of 120 Stones. 6 density contours; the peak is near -0.3, -12.3. Density contours of 120 Stones 6 density contours; the peak is near -0.3, -12.3. Legend: Density, share of the peak, % Density, share of the peak, % 10% 25% 40% 55% 70% 85%
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { curlingHeat } from "@johnmorrisdotca/kyogijo-stadiums/charts";
const luck = (n) => {
const v = Math.sin(n * 12.9898) * 43758.5453;
return v - Math.floor(v);
};
const bell = (n) => luck(n) + luck(n + 1) + luck(n + 2) - 1.5;
const stones = Array.from({ length: 240 }, (_, i) => {
const inHouse = luck(i * 7) < 0.45;
return { x: bell(i * 5) * (inHouse ? 3 : 2.5), y: inHouse ? bell(i * 11) * 3 : -8 - 9 * luck(i * 13), team: i % 2 ? "home" : "away" };
});
const svg = curlingHeat(stones, { view: "contour", team: "home" }).draw({ orientation: "landscape" });
The zones of the house
Where the stones came to rest Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: Zone chart of 240 Stones. Stones in 5 zones, from 2 to 125. Highest: Free guard zone (125), 4-foot ring (69), 8-foot ring (40). Zone chart of 240 Stones Stones in 5 zones, from 2 to 125. Highest: Free guard zone (125), 4-foot ring (69), 8-foot ring (40). Free guard zone: 125 (125) 12-foot ring: 2 (2) 8-foot ring: 40 (40) 4-foot ring: 69 (69) Button: 4 (4) 125 40 2 Legend: Stones Stones 50 100
The number in each zone is the stones that came to rest in it, by their centres.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { curlingHeat } from "@johnmorrisdotca/kyogijo-stadiums/charts";
const luck = (n) => {
const v = Math.sin(n * 12.9898) * 43758.5453;
return v - Math.floor(v);
};
const bell = (n) => luck(n) + luck(n + 1) + luck(n + 2) - 1.5;
const stones = Array.from({ length: 240 }, (_, i) => {
const inHouse = luck(i * 7) < 0.45;
return { x: bell(i * 5) * (inHouse ? 3 : 2.5), y: inHouse ? bell(i * 11) * 3 : -8 - 9 * luck(i * 13), team: i % 2 ? "home" : "away" };
});
const svg = curlingHeat(stones, { view: "zones", show: "house" }).draw();
The free guards, as discs in the teams' colours, folded
Where the stones came to rest Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Shown folded: the whole sheet is in the middle, with its top house enlarged on the left and its bottom house enlarged on the right. Each enlarged part runs from the hog line to the back line. Data is drawn in the enlarged parts as well. Data: 125 Stone. By team: home 66, away 59. 125 Stone By team: home 66, away 59. 125 Stone By team: home 66, away 59. 125 Stone By team: home 66, away 59. Top house Bottom house
Stones that fall on each other build up colour.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { curlingHeat } from "@johnmorrisdotca/kyogijo-stadiums/charts";
const luck = (n) => {
const v = Math.sin(n * 12.9898) * 43758.5453;
return v - Math.floor(v);
};
const bell = (n) => luck(n) + luck(n + 1) + luck(n + 2) - 1.5;
const stones = Array.from({ length: 240 }, (_, i) => {
const inHouse = luck(i * 7) < 0.45;
return { x: bell(i * 5) * (inHouse ? 3 : 2.5), y: inHouse ? bell(i * 11) * 3 : -8 - 9 * luck(i * 13), team: i % 2 ? "home" : "away" };
});
const svg = curlingHeat(stones, { view: "discs", only: "guards", show: "folded" }).draw();
Cells, folded
Where the stones came to rest Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Shown folded: the whole sheet is in the middle, with its top house enlarged on the left and its bottom house enlarged on the right. Each enlarged part runs from the hog line to the back line. Data is drawn in the enlarged parts as well. Data: Heat map of 240 Stones. Stones in 80 cells, from 1 to 11. Highest: -0.5, -0.5 (11), -1.5, 0.5 (10), -0.5, 0.5 (9). Heat map of 240 Stones Stones in 80 cells, from 1 to 11. Highest: -0.5, -0.5 (11), -1.5, 0.5 (10), -0.5, 0.5 (9). Legend: Stones Stones 2.5 5 7.5 10 Heat map of 240 Stones Stones in 80 cells, from 1 to 11. Highest: -0.5, -0.5 (11), -1.5, 0.5 (10), -0.5, 0.5 (9). Legend: Stones Stones 2.5 5 7.5 10 Heat map of 240 Stones Stones in 80 cells, from 1 to 11. Highest: -0.5, -0.5 (11), -1.5, 0.5 (10), -0.5, 0.5 (9). Legend: Stones Stones 2.5 5 7.5 10 Top house Bottom house
The colour bar stands in the enlarged house the stones are at.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { curlingHeat } from "@johnmorrisdotca/kyogijo-stadiums/charts";
const luck = (n) => {
const v = Math.sin(n * 12.9898) * 43758.5453;
return v - Math.floor(v);
};
const bell = (n) => luck(n) + luck(n + 1) + luck(n + 2) - 1.5;
const stones = Array.from({ length: 240 }, (_, i) => {
const inHouse = luck(i * 7) < 0.45;
return { x: bell(i * 5) * (inHouse ? 3 : 2.5), y: inHouse ? bell(i * 11) * 3 : -8 - 9 * luck(i * 13), team: i % 2 ? "home" : "away" };
});
const svg = curlingHeat(stones, { show: "folded" }).draw();
The stones in the house, the house alone
Where the stones came to rest Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: Heat map of 115 Stones. Stones in 49 cells, from 1 to 8. Highest: -0.8, 0 (8), 0.8, 0.8 (6), -0.8, -0.9 (6). Heat map of 115 Stones Stones in 49 cells, from 1 to 8. Highest: -0.8, 0 (8), 0.8, 0.8 (6), -0.8, -0.9 (6). Legend: Stones Stones 2 4 6 8
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { curlingHeat } from "@johnmorrisdotca/kyogijo-stadiums/charts";
const luck = (n) => {
const v = Math.sin(n * 12.9898) * 43758.5453;
return v - Math.floor(v);
};
const bell = (n) => luck(n) + luck(n + 1) + luck(n + 2) - 1.5;
const stones = Array.from({ length: 240 }, (_, i) => {
const inHouse = luck(i * 7) < 0.45;
return { x: bell(i * 5) * (inHouse ? 3 : 2.5), y: inHouse ? bell(i * 11) * 3 : -8 - 9 * luck(i * 13), team: i % 2 ? "home" : "away" };
});
const svg = curlingHeat(stones, { only: "house", show: "house", cell: 0.8 }).draw();
A game's ends in one picture
A game, end by end Drawings (6): End 1: away 1; End 2: home 1; End 3: away 3; End 4: home 1; End 5: away 1; End 6: away 1. A game, end by end End 1: away 1 Curling stones, End 1 Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: 1 Shot rock. By outcome: shot-rock 1. 1 Counting stone. By outcome: counting 1. 8 Stone. 8 stones. By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 1.65 to 6.01. 8 Stone. 1 Shot rock By outcome: shot-rock 1. 1 Counting stone By outcome: counting 1. 8 Stone 8 stones By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 1.65 to 6.01. away 1: 2.21 ft from the button home 2: 1.67 ft from the button away 3: 5.12 ft from the button home 4: 6.01 ft from the button away 5: 1.65 ft from the button, the shot rock home 6: 3.87 ft from the button away 7: 4.06 ft from the button home 8: 3.41 ft from the button 8 Stone 1 2 3 4 5 6 7 8 End 2: home 1 Curling stones, End 2 Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: 1 Shot rock. By outcome: shot-rock 1. 1 Counting stone. By outcome: counting 1. 8 Stone. 8 stones. By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 0.63 to 6.32. 8 Stone. 1 Shot rock By outcome: shot-rock 1. 1 Counting stone By outcome: counting 1. 8 Stone 8 stones By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 0.63 to 6.32. away 1: 5.14 ft from the button home 2: 0.63 ft from the button, the shot rock away 3: 1.98 ft from the button home 4: 6.32 ft from the button away 5: 1.38 ft from the button home 6: 1.82 ft from the button away 7: 2.92 ft from the button home 8: 5.46 ft from the button 8 Stone 1 2 3 4 5 6 7 8 End 3: away 3 Curling stones, End 3 Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: 1 Shot rock. By outcome: shot-rock 1. 3 Counting stone. By outcome: counting 3. 8 Stone. 8 stones. By outcome: stone 5, counting 2, shot-rock 1. By team: away 4, home 4. Values from 0.73 to 6.42. 8 Stone. 1 Shot rock By outcome: shot-rock 1. 3 Counting stone By outcome: counting 3. 8 Stone 8 stones By outcome: stone 5, counting 2, shot-rock 1. By team: away 4, home 4. Values from 0.73 to 6.42. away 1: 0.75 ft from the button, counting home 2: 5.01 ft from the button away 3: 0.87 ft from the button, counting home 4: 2.02 ft from the button away 5: 0.73 ft from the button, the shot rock home 6: 4.28 ft from the button away 7: 5.33 ft from the button home 8: 6.42 ft from the button 8 Stone 1 2 3 4 5 6 7 8 End 4: home 1 Curling stones, End 4 Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: 1 Shot rock. By outcome: shot-rock 1. 1 Counting stone. By outcome: counting 1. 8 Stone. 8 stones. By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 1.2 to 5.36. 8 Stone. 1 Shot rock By outcome: shot-rock 1. 1 Counting stone By outcome: counting 1. 8 Stone 8 stones By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 1.2 to 5.36. away 1: 4.88 ft from the button home 2: 4.41 ft from the button away 3: 5.36 ft from the button home 4: 1.2 ft from the button, the shot rock away 5: 2.36 ft from the button home 6: 4.57 ft from the button away 7: 2.2 ft from the button home 8: 2.81 ft from the button 8 Stone 1 2 3 4 5 6 7 8 End 5: away 1 Curling stones, End 5 Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: 1 Shot rock. By outcome: shot-rock 1. 1 Counting stone. By outcome: counting 1. 8 Stone. 8 stones. By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 0.45 to 6.37. 8 Stone. 1 Shot rock By outcome: shot-rock 1. 1 Counting stone By outcome: counting 1. 8 Stone 8 stones By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 0.45 to 6.37. away 1: 6.37 ft from the button home 2: 6.16 ft from the button away 3: 3.31 ft from the button home 4: 1.96 ft from the button away 5: 4.98 ft from the button home 6: 1.81 ft from the button away 7: 0.45 ft from the button, the shot rock home 8: 0.88 ft from the button 8 Stone 1 2 3 4 5 6 7 8 End 6: away 1 Curling stones, End 6 Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: 1 Shot rock. By outcome: shot-rock 1. 1 Counting stone. By outcome: counting 1. 8 Stone. 8 stones. By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 1.19 to 6.53. 8 Stone. 1 Shot rock By outcome: shot-rock 1. 1 Counting stone By outcome: counting 1. 8 Stone 8 stones By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 1.19 to 6.53. away 1: 1.19 ft from the button, the shot rock home 2: 1.72 ft from the button away 3: 4.44 ft from the button home 4: 1.98 ft from the button away 5: 4.48 ft from the button home 6: 4.71 ft from the button away 7: 4.8 ft from the button home 8: 6.53 ft from the button 8 Stone 1 2 3 4 5 6 7 8
Each cell is the chart of that end, scored by the rules.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { curlingStones } from "@johnmorrisdotca/kyogijo-stadiums/charts";
import { drawGrid } from "@johnmorrisdotca/kyogijo-stadiums/layouts";
const luck = (n) => {
const v = Math.sin(n * 12.9898) * 43758.5453;
return v - Math.floor(v);
};
const bell = (n) => luck(n) + luck(n + 1) + luck(n + 2) - 1.5;
const stones = Array.from({ length: 240 }, (_, i) => {
const inHouse = luck(i * 7) < 0.45;
return { x: bell(i * 5) * (inHouse ? 3 : 2.5), y: inHouse ? bell(i * 11) * 3 : -8 - 9 * luck(i * 13), team: i % 2 ? "home" : "away" };
});
const ends = [0, 1, 2, 3, 4, 5].map((end) => {
const chart = curlingStones(stones.slice(end * 8, end * 8 + 8).map((s, i) => ({ ...s, y: s.y > -2 ? s.y : s.y * 0.4, number: i + 1 })), { end: end + 1, id: `end-${end + 1}` });
return { drawing: chart, label: `End ${end + 1}: ${chart.totals.scoring ?? "blank"} ${chart.totals.points}` };
});
const svg = drawGrid(ends, { columns: 3, width: 900, title: "A game, end by end" });
The board and the badge#
Each team's score in each end (ends), the total, the hammer, and an end as the status.
The board, tall
Harbour City Gulls 5, Prairie Ridge Bison 4, End 10 Final, End 10. Harbour City Gulls 5, Prairie Ridge Bison 4. By end, Harbour City Gulls: 0, 1, 0, 2, 0, 0, 1, 0, 1, X. Prairie Ridge Bison has the hammer. By end, Prairie Ridge Bison: 1, 0, 2, 0, 1, 0, 0, 1, 0. Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Final HCG HARBOUR CITY GULLS PRB PRAIRIE RIDGE BISON 0 1 1 0 0 2 2 0 0 1 0 0 1 0 0 1 1 0 X 5 4
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({
sport: "curling",
away: {
name: "Harbour City Gulls",
abbr: "HCG",
score: 5,
color: "#1d4f91",
ends: [0, 1, 0, 2, 0, 0, 1, 0, 1, "X"],
},
home: {
name: "Prairie Ridge Bison",
abbr: "PRB",
score: 4,
color: "#a8452c",
hammer: true,
ends: [1, 0, 2, 0, 1, 0, 0, 1, 0],
},
status: "end-10",
competition: "Final",
});
The board, wide
Harbour City Gulls 5, Prairie Ridge Bison 4, End 10 Final, End 10. Harbour City Gulls 5, Prairie Ridge Bison 4. By end, Harbour City Gulls: 0, 1, 0, 2, 0, 0, 1, 0, 1, X. Prairie Ridge Bison has the hammer. By end, Prairie Ridge Bison: 1, 0, 2, 0, 1, 0, 0, 1, 0. Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Final HARBOUR CITY GULLS 0 1 0 2 0 0 1 0 1 X 5 PRAIRIE RIDGE BISON 1 0 2 0 1 0 0 1 0 4
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({
sport: "curling",
away: {
name: "Harbour City Gulls",
abbr: "HCG",
score: 5,
color: "#1d4f91",
ends: [0, 1, 0, 2, 0, 0, 1, 0, 1, "X"],
},
home: {
name: "Prairie Ridge Bison",
abbr: "PRB",
score: 4,
color: "#a8452c",
hammer: true,
ends: [1, 0, 2, 0, 1, 0, 0, 1, 0],
},
status: "end-10",
competition: "Final",
orientation: "landscape",
});
A compact card, wide
Harbour City Gulls 5, Prairie Ridge Bison 4, End 10 Final, End 10. Harbour City Gulls 5, Prairie Ridge Bison 4. By end, Harbour City Gulls: 0, 1, 0, 2, 0, 0, 1, 0, 1, X. Prairie Ridge Bison has the hammer. By end, Prairie Ridge Bison: 1, 0, 2, 0, 1, 0, 0, 1, 0. Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. HCG 5 PRB 4 End 10
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const svg = drawKyogijo({
sport: "curling",
away: {
name: "Harbour City Gulls",
abbr: "HCG",
score: 5,
color: "#1d4f91",
ends: [0, 1, 0, 2, 0, 0, 1, 0, 1, "X"],
},
home: {
name: "Prairie Ridge Bison",
abbr: "PRB",
score: 4,
color: "#a8452c",
hammer: true,
ends: [1, 0, 2, 0, 1, 0, 0, 1, 0],
},
status: "end-10",
competition: "Final",
orientation: "landscape",
size: "compact",
});
The stones of an end#
curlingStones judges the stones by the rules and rings the ones that score: one ring for a counting stone, two for the shot rock.
An end, the house at the top
Curling stones, End 6 Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: 1 Shot rock. By outcome: shot-rock 1. 2 Counting stone. By outcome: counting 2. 6 Stone. 6 stones. By outcome: stone 4, shot-rock 1, counting 1. By team: home 3, away 3. Values from 0.5 to 14. 6 Stone. 1 Shot rock By outcome: shot-rock 1. 2 Counting stone By outcome: counting 2. 6 Stone 6 stones By outcome: stone 4, shot-rock 1, counting 1. By team: home 3, away 3. Values from 0.5 to 14. Prairie Ridge 8: 0.5 ft from the button, the shot rock Prairie Ridge 6: 1.44 ft from the button, counting Harbour City 7: 2.2 ft from the button Harbour City 5: 3.82 ft from the button Harbour City 3: 9 ft from the button Prairie Ridge 2: 14 ft from the button 6 Stone 8 6 7 5 3 2
Home scores 2: its two stones are nearer the button than every stone of the other team.
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { curlingStones } from "@johnmorrisdotca/kyogijo-stadiums/charts";
const stones = [
{ x: 0.4, y: 0.3, team: "home", number: 8 },
{ x: -1.2, y: -0.8, team: "home", number: 6 },
{ x: 1.9, y: 1.1, team: "away", number: 7 },
{ x: -2.6, y: 2.8, team: "away", number: 5 },
{ x: 0.2, y: -9, team: "away", number: 3 },
{ x: 0.1, y: -14, team: "home", number: 2 },
];
const chart = curlingStones(stones, { end: 6, hammer: "home", names: { home: "Prairie Ridge", away: "Harbour City" } });
const svg = chart.draw();
The same end, wide, with its key
Curling stones, End 6 Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: 1 Shot rock. By outcome: shot-rock 1. 2 Counting stone. By outcome: counting 2. 6 Stone. 6 stones. By outcome: stone 4, shot-rock 1, counting 1. By team: home 3, away 3. Values from 0.5 to 14. 6 Stone. Key. Stone, Counting stone, Shot rock Key. 1 Shot rock By outcome: shot-rock 1. 2 Counting stone By outcome: counting 2. 6 Stone 6 stones By outcome: stone 4, shot-rock 1, counting 1. By team: home 3, away 3. Values from 0.5 to 14. home 8: 0.5 ft from the button, the shot rock home 6: 1.44 ft from the button, counting away 7: 2.2 ft from the button away 5: 3.82 ft from the button away 3: 9 ft from the button home 2: 14 ft from the button 6 Stone 8 6 7 5 3 2 Key Stone, Counting stone, Shot rock Key Stone Counting stone Shot rock
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { curlingStones } from "@johnmorrisdotca/kyogijo-stadiums/charts";
const stones = [
{ x: 0.4, y: 0.3, team: "home", number: 8 },
{ x: -1.2, y: -0.8, team: "home", number: 6 },
{ x: 1.9, y: 1.1, team: "away", number: 7 },
{ x: -2.6, y: 2.8, team: "away", number: 5 },
{ x: 0.2, y: -9, team: "away", number: 3 },
{ x: 0.1, y: -14, team: "home", number: 2 },
];
const chart = curlingStones(stones, { end: 6, hammer: "home" });
const svg = chart.draw({ orientation: "landscape" });
Zones: the rings
Curling sheet Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: Zone chart of 80 stones. Count in 4 zones, from 1 to 69. Highest: Free guard zone (69), 12-foot ring (6), 4-foot ring (2). 2 outside the grid or the zones. Zone chart of 80 stones Count in 4 zones, from 1 to 69. Highest: Free guard zone (69), 12-foot ring (6), 4-foot ring (2). 2 outside the grid or the zones. Free guard zone: 69 (69) 12-foot ring: 6 (6) 8-foot ring: 1 (1) 4-foot ring: 2 (2) Button (0) 69 6 1 Legend: Count Count 20 40 60
Open in a page loads the published package from jsDelivr, which serves only released versions.
Show the code import { drawKyogijo } from "@johnmorrisdotca/kyogijo-stadiums";
const stones = Array.from({ length: 80 }, (_, i) => ({ x: 8.5 * Math.cos(i * 2.4) * Math.sqrt((i % 40) / 40), y: 8 * Math.sin(i * 2.4) * Math.sqrt((i % 40) / 40) - 14 + (i % 3) * 3, outcome: i % 4 ? "stone" : "counting" }));
const svg = drawKyogijo({ sport: "curling", sheet: { show: "half", end: "left" }, layers: [{ kind: "zones", name: "stones", zones: "curling-house", from: "curling", attacking: "left", end: "left", data: stones, labels: { show: ["value"] }, legend: true }] });