These are counts in one KanjiVG snapshot. They are not a rule that a stroke must cross itself, or that a hook must close.

Click a plate to replay. With reduced motion the finished character stays still. The measured stroke turns indigo once it has been drawn. A plate without data-self-cross is not recolored. The draw timings are unchanged.

On this page

How a self-crossing is read

A stroke is one path. The path is sampled the same way as on the crossings page. A cubic or a smooth cubic becomes 24 straight chords at equal parameter steps. The test is that polyline meeting itself.

Proper self-crossing
Two chords of the same stroke, with at least one chord between them, meet in the interior of both. The absolute cross product of their directions is greater than 1e-8. The meeting point is more than the tolerance from both endpoints of the stroke. A hit within 1e-6 of an interior sample counts when the samples on either side lie on opposite sides of the other chord, and that sample is likewise clear of the endpoints. The other chord is not one of the two chords that meet at the sample.
Self-touch
The stroke is not a proper self-crossing, and two points on non-adjacent chords come within the tolerance. The arc length along the stroke between those points is at least the arc floor. A stroke is counted as one or the other, not both.
Return
The minimum Euclidean distance between points on non-adjacent chords whose arc-length separation is at least the arc floor. The test uses the raw distance. The stored figure is that distance rounded half up to a thousandth. A stroke with no such pair has no return.
Rank tenth
The bin of k/n. b = ⌈10k/n⌉ − 1, so k/n lies in (b/10, (b+1)/10]. The helper is rank_tenth in tools/stroke_start.py. Ten bins. This is not the place (i−1)/(n−1) on the crossings page. Stroke 1 of a ten-stroke character is the first bin. Stroke 1 of a two-stroke character is the fifth bin, because 1/2 is 0.5.
Letter-stripped type
kvg:type as the file writes it, with a trailing run of ASCII letters removed from each slash-separated piece. The slash stays. The helper is normalize in tools/stroke_types.py, the same strip as the stroke-type inventory. ㇆a and ㇆ are one string.
What is not counted
A crossing with an earlier stroke is Crossings and order. This page does not repeat those counts. 乃 is not in this jōyō list. る is kana, and it is not one of these files. 乙 and 及 are in the list.

The counts

Class Strokes Characters

By letter-stripped type

Letter-stripped type Strokes Self-crossing Self-touch only

By rank tenth

k/n Strokes Self-crossing Self-touch only

Characters

The nearest returns

KanjiVG · CC BY-SA 3.0

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.