These are counts in one KanjiVG snapshot. They are not a rule that the pen must travel that way, or that a jump must match the next stroke.

On this page

How a jump direction is read

The start of a stroke is its first moveto. The end is the point after the last command. The jump is the straight line from the end of stroke i to the start of stroke i+1. It is not the curve of either stroke.

That line is placed in the eight sectors of the stroke-direction atlas, plus a zero step. In the SVG, y grows downward, so upward is a smaller y. A line within 22.5° of due right is rightward, and the same cone is used for downward, leftward, and upward. A line on the 22.5° boundary belongs to the cardinal sector. A line outside every cone is the diagonal of its quadrant. A line of length zero is no movement. The helper is compass in tools/stroke_direction.py. The hooks page uses this compass for the step after a hook stroke. This page counts every jump.

The rank of the jump is the rank of the stroke it arrives at, stroke k = i+1, in a character of n strokes. The tenth is the bin b such that k/n lies in (b/10, (b+1)/10]. In integers, b = ceil(10k/n) − 1. This is the same cut as stroke-start position and as direction runs. It is not the place (i−1)/(n−1) on the pen-lift page.

A jump crosses a component boundary when stroke i and stroke i+1 sit in different top-level groups. The group is an immediate child of the character group kvg:<5-hex>. An immediate g is one group, including a sibling that carries kvg:part. Those siblings are not joined. A run of immediate path elements is one group. The component handoffs page joins kvg:part siblings into one slot. This page does not. The direction-runs page uses this same grouping.

The jump’s class is compared with the start-to-end class of the stroke just finished and with the start-to-end class of the stroke that follows. Those two classes are the ones on the stroke-direction atlas. A jump can match one of them, both, or neither. No movement matches only no movement.

Pen jump
The straight line from the end of stroke i to the start of stroke i+1, classed in the eight sectors plus a zero step.
Position in the order
The tenth of k/n for the stroke the jump arrives at. k is at least 2. A one-stroke character has no jump.
Component boundary
The two strokes of the jump sit in different top-level groups. kvg:part siblings are not joined.
Inside one group
The two strokes of the jump sit in the same top-level group.
Match
The jump’s class equals the start-to-end class of the previous stroke, or of the next stroke, or of both.

Eight directions

Direction Jumps Share

Jump direction by position in the order

Inside a component, or across a boundary

Direction Inside one group Boundary Total

The jump and the two strokes

Direction Jumps Previous only Next only Both Neither

Six characters

Each plate draws every jump as a dotted line. The line appears when the next stroke starts. The caption names the jump the character was chosen for.

Click a plate to replay. With reduced motion the finished character stays still. A dotted line runs from the end of a stroke to the start of the next. The line appears when that next stroke starts. A jump of no movement has no length, so that line is not seen.

  • Pen jump

KanjiVG · CC BY-SA 3.0

Stroke numbers, for checking against the file

Every jump on the plates. End is the end of the stroke just finished. Start is the start of the next stroke. Both are shown to four decimal places. The tenth is the bin of the arriving stroke.

Character From To Direction Previous stroke Next stroke Group Tenth End Start

What this shows

Stroke diagrams: KanjiVG, Ulrich Apel et al., CC BY-SA 3.0, from commit 70a0b7ae0c18ceb5cb358274b029cce0234a43bc of github.com/KanjiVG/kanjivg. The plate files are unmodified copies in site/assets/kanjivg/. Jōyō index: the list used on the Gallery. Direction classes are compass in tools/stroke_direction.py, the same eight sectors as the stroke-direction atlas.