Your data would profit from the nearest-neighbor clustering algorithm. (This differs slightly from the nearest-neighbor pattern classification algorithm, which is based on forming a Voronoi tessellation of the input space.) In nearest-neighbor clustering, each point is linked to a neighboring point if the distance (typically a Euclidean distance) is less than some threshold $d_0$. In this way, chains (and tight clusters) are jointed but separate groups are not. Of course, the number and identity of the clusters depends upon this criterion threshold $d_0$. If $d_0$ is large, then the entire data set falls into a single cluster; if $d_0$ is very small, then each individual point is a singleton cluster. The choice of $d_0$, then, is application dependent.

Once can use statistical measures of the distribution in distance to find natural "gaps" in such distances to find a "natural" value for $d_0$ that captures inherent clusters in the data.

Once you have your clusters, you can either merely label them as separate, or instead (and you imply) classify their shape. In the latter case, you'll need a simple grammar or statistical description of your categories. For instance, whether the points are linked in a chain, or a cross, or whatever.

Here is a small $d_0$:

Here is a larger $d_0$:

Now, to do pattern matching between some new data and one of these templates or exemplars, you have to decide ahead of time the transformations or invariances you allow, such as scale, rotation, and presumably some amount of distortion. I would normalize all your datasets to fit into a unit square. Then "blur" each point (with a Gaussian kernel) and do a simple correlation between your test data and each of the templates, allowing for the imposed transformations (e.g., rotation).