Kyogijo Stadiums競技場

Guides, the reference, a gallery of every picture it can draw, and how it compares: the pages are made from the package's own files when the site is built.

About the name

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 sheetDrawn 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 sheetDrawn 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 sheetDrawn 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 sheetDrawn 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 sheetDrawn 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 sheetDrawn 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 sheetDrawn 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 sheetDrawn 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 sheetDrawn 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 sheetDrawn 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 sheetDrawn 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 sheetDrawn 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 houseBottom 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 sheetDrawn 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 houseRight 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 sheetDrawn 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 houseBottom 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 sheetDrawn 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 houseBottom 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 sheetDrawn 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 houseBottom 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 sheetDrawn 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 sheetDrawn 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 6Drawn 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 rockBy outcome: shot-rock 1.2 Counting stoneBy outcome: counting 2.6 Stone6 stonesBy 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 rockhome 6: 1.44 ft from the button, countingaway 7: 2.2 ft from the buttonaway 5: 3.82 ft from the buttonaway 3: 9 ft from the buttonhome 2: 14 ft from the button6 Stone867532Top houseBottom 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 6Drawn 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 rockBy outcome: shot-rock 1.2 Counting stoneBy outcome: counting 2.6 Stone6 stonesBy 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 rockhome 6: 1.44 ft from the button, countingaway 7: 2.2 ft from the buttonaway 5: 3.82 ft from the buttonaway 3: 9 ft from the buttonhome 2: 14 ft from the button6 Stone867532KeyStone, Counting stone, Shot rockKeyStoneCounting stoneShot rockLeft houseRight 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 restDrawn 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 StonesStones in 80 cells, from 1 to 11. Highest: -0.5, -0.5 (11), -1.5, 0.5 (10), -0.5, 0.5 (9).Legend: StonesStones2.557.510

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 restDrawn 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 StonesStones in 31 hexagons, from 1 to 24. Highest: 0.6, -13.2 (24), -1.2, 0.3 (24), 0.6, 1.4 (18).Legend: StonesStones5101520

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 restDrawn 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 Stones6 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 restDrawn 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 StonesStones 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)125402Legend: StonesStones50100

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 restDrawn 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 StoneBy team: home 66, away 59.Top houseBottom 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 restDrawn 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 StonesStones in 80 cells, from 1 to 11. Highest: -0.5, -0.5 (11), -1.5, 0.5 (10), -0.5, 0.5 (9).Legend: StonesStones2.557.510Top houseBottom 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 restDrawn 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 StonesStones in 49 cells, from 1 to 8. Highest: -0.8, 0 (8), 0.8, 0.8 (6), -0.8, -0.9 (6).Legend: StonesStones2468

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 endDrawings (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 endEnd 1: away 1Curling stones, End 1Drawn 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 rockBy outcome: shot-rock 1.1 Counting stoneBy outcome: counting 1.8 Stone8 stonesBy 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 buttonhome 2: 1.67 ft from the buttonaway 3: 5.12 ft from the buttonhome 4: 6.01 ft from the buttonaway 5: 1.65 ft from the button, the shot rockhome 6: 3.87 ft from the buttonaway 7: 4.06 ft from the buttonhome 8: 3.41 ft from the button8 Stone12345678End 2: home 1Curling stones, End 2Drawn 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 rockBy outcome: shot-rock 1.1 Counting stoneBy outcome: counting 1.8 Stone8 stonesBy 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 buttonhome 2: 0.63 ft from the button, the shot rockaway 3: 1.98 ft from the buttonhome 4: 6.32 ft from the buttonaway 5: 1.38 ft from the buttonhome 6: 1.82 ft from the buttonaway 7: 2.92 ft from the buttonhome 8: 5.46 ft from the button8 Stone12345678End 3: away 3Curling stones, End 3Drawn 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 rockBy outcome: shot-rock 1.3 Counting stoneBy outcome: counting 3.8 Stone8 stonesBy 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, countinghome 2: 5.01 ft from the buttonaway 3: 0.87 ft from the button, countinghome 4: 2.02 ft from the buttonaway 5: 0.73 ft from the button, the shot rockhome 6: 4.28 ft from the buttonaway 7: 5.33 ft from the buttonhome 8: 6.42 ft from the button8 Stone12345678End 4: home 1Curling stones, End 4Drawn 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 rockBy outcome: shot-rock 1.1 Counting stoneBy outcome: counting 1.8 Stone8 stonesBy 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 buttonhome 2: 4.41 ft from the buttonaway 3: 5.36 ft from the buttonhome 4: 1.2 ft from the button, the shot rockaway 5: 2.36 ft from the buttonhome 6: 4.57 ft from the buttonaway 7: 2.2 ft from the buttonhome 8: 2.81 ft from the button8 Stone12345678End 5: away 1Curling stones, End 5Drawn 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 rockBy outcome: shot-rock 1.1 Counting stoneBy outcome: counting 1.8 Stone8 stonesBy 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 buttonhome 2: 6.16 ft from the buttonaway 3: 3.31 ft from the buttonhome 4: 1.96 ft from the buttonaway 5: 4.98 ft from the buttonhome 6: 1.81 ft from the buttonaway 7: 0.45 ft from the button, the shot rockhome 8: 0.88 ft from the button8 Stone12345678End 6: away 1Curling stones, End 6Drawn 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 rockBy outcome: shot-rock 1.1 Counting stoneBy outcome: counting 1.8 Stone8 stonesBy 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 rockhome 2: 1.72 ft from the buttonaway 3: 4.44 ft from the buttonhome 4: 1.98 ft from the buttonaway 5: 4.48 ft from the buttonhome 6: 4.71 ft from the buttonaway 7: 4.8 ft from the buttonhome 8: 6.53 ft from the button8 Stone12345678

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 10Final, 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.FinalHCGHARBOURCITY GULLSPRBPRAIRIERIDGE BISON10121030242050160071080191010X54TotalEnd 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",
});

The board, wide

Harbour City Gulls 5, Prairie Ridge Bison 4, End 10Final, 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.Final12345678910TotalHARBOURCITY GULLS010200101X5PRAIRIERIDGE BISON1020100104End 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",
});

A compact card, wide

Harbour City Gulls 5, Prairie Ridge Bison 4, End 10Final, 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.HCG5PRB4End 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",
});

An extra end

Harbour City Gulls 6, Prairie Ridge Bison 5, Extra endExtra end. Harbour City Gulls 6, Prairie Ridge Bison 5. By end, Harbour City Gulls: 0, 1, 0, 2, 0, 0, 1, 0, 1, 0, 1. By end, Prairie Ridge Bison: 1, 0, 2, 0, 1, 0, 0, 1, 0, 0, 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.HCG6PRB5Extra end

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: 6,
    color: "#1d4f91",
    ends: [0, 1, 0, 2, 0, 0, 1, 0, 1, 0, 1],
  },
  home: {
    name: "Prairie Ridge Bison",
    abbr: "PRB",
    score: 5,
    color: "#a8452c",
    hammer: false,
    ends: [1, 0, 2, 0, 1, 0, 0, 1, 0, 0, 0],
  },
  status: "extra-end",
  size: "badge",
});

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 6Drawn 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 rockBy outcome: shot-rock 1.2 Counting stoneBy outcome: counting 2.6 Stone6 stonesBy 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 rockPrairie Ridge 6: 1.44 ft from the button, countingHarbour City 7: 2.2 ft from the buttonHarbour City 5: 3.82 ft from the buttonHarbour City 3: 9 ft from the buttonPrairie Ridge 2: 14 ft from the button6 Stone867532

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 6Drawn 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 rockBy outcome: shot-rock 1.2 Counting stoneBy outcome: counting 2.6 Stone6 stonesBy 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 rockhome 6: 1.44 ft from the button, countingaway 7: 2.2 ft from the buttonaway 5: 3.82 ft from the buttonaway 3: 9 ft from the buttonhome 2: 14 ft from the button6 Stone867532KeyStone, Counting stone, Shot rockKeyStoneCounting stoneShot 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 sheetDrawn 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 stonesCount 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)6961Legend: CountCount204060

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 }] });