Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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]]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement