With Szabolcs' reference: https://reference.wolfram.com/language/ref/Classify#1782628206
s = 64;
a = ConstantArray[1, {s, s}];
DynamicModule[{p1, p2},
Grid[{
{
EventHandler[Dynamic[Image[a], TrackedSymbols :> {a}], {
"MouseDown" :> (p1 = p2 = PixelPos[]; PaintDot[a, p1]),
"MouseDragged" :> (p1 = p2; p2 = PixelPos[];
PaintLine[a, p1, p2])
}]
},
{Button["clear", a = ConstantArray[1, {s, s}]]}}
, Frame -> True
]
]
where (need to be defined first; kindly extracted by Szabolcs from the above example):
PixelPos[] :=
Replace[MousePosition["Graphics"], {{i_, j_} :> Round[{64 - j, i}],
_ :> None}]
Attributes[PaintDot] = {HoldFirst};
PaintDot[data_Symbol, p : {i1_, j1_}] := Block[{dim = Length[data]},
Do[
If[EuclideanDistance[N[{i, j}], N[p]] < 2.5, data[[i, j]] = 0.],
{i, Max[i1 - 3, 1], Min[i1 + 3, dim]}, {j, Max[j1 - 3, 1],
Min[j1 + 3, dim]}]]
Attributes[PaintLine] = {HoldFirst};
PaintLine[data_Symbol, {i1_, j1_},
{i2_, j2_}] := Block[{dim, indices, ib, ie, jb, je},
indices = InterpolatePoints[N[{i1, j1}], N[{i2, j2}], 2.5];
{ib, ie} = Sort[{i1, i2}]; {jb, je} =
Sort[{j1, j2}]; {{ib, jb}, {ie, je}} =
Clip[{{ib, jb} - 3, {ie, je} + 3}, {1, Length[data]}];
Quiet[
Do[If[Min[(EuclideanDistance[N[{i, j}], #1] & ) /@ indices] <
2.5,
data[[i, j]] = 0.], {i, ib, ie}, {j, jb, je}]]; ]
InterpolatePoints[start$_, stop$_] := Module[{dist$, unit$},
dist$ = N[EuclideanDistance[start$, stop$]];
If[dist$ < 3,
Return[{start$, stop$}]
];
unit$ = Normalize[stop$ - N[start$]];
Append[stop$][Table[start$ + i*unit$, {i, 0, dist$, 3}]]
]
InterpolatePoints[p1_, p2_, r_] :=
Module[{d, v}, d = EuclideanDistance[p1, p2];
If[d < 2*r, Return[{p1, p2}]]; v = Normalize[p2 - p1];
Developer`ToPackedArray[
Append[p2][Table[p1 + i*v, {i, 0., d, r}]], Real]]
```
Classify
documentation page. The very last one seems like what you want. Unfortunately, the raw code wasn't included and would be some trouble to retrieve. $\endgroup$ – Szabolcs Dec 10 '19 at 8:09