# Get the intersection points of the boundary of the region along with an oriented curve in order

reg = BoundaryDiscretizeGraphics[
Text[Style["℘", Bold, FontFamily -> "Times"]], _Text];
plot = ParametricPlot[{Cos[t], t*Sin[t]}, {t, -6, 6}];
Show[reg, plot]


We can see that the oriented curve intersection the font ℘ with 6 points. I want to get the coordinate of the 6 points respect to the direction of the curve.

The first and the last points seems to be {{-0.078, 1.64}, ..., {-0.728, -2.67}}

BTW, the parametric curve maybe any other curve, for example, see the animation.

reg = BoundaryDiscretizeGraphics[
Text[Style["℘", Bold,
FontFamily -> "Times"]], _Text];
Manipulate[
Show[reg, ParametricPlot[t*{Cos[t], Sin[t]}, {t, -6, s}],
PlotRange -> 5], {s, -5, 6}]

• Interesting question. In the case of Mathematica Version 14.0.0 for Mac OS X ARM, there are only four intersection points :-) Commented Jun 1 at 2:53
• By the way, is it important that the parameter range is [-6,6] rather than [0,6]? Commented Jun 1 at 3:00
• @A.Kato We can consider the updated example. [-6,6] or [0,6] is not so important, we can set another range. Commented Jun 1 at 3:16

• SignedRegionDistance do the job.
• But my code only work for the updated example, not for the first example since there are extra values of the parametric t.
Clear["Global*"];
reg = BoundaryDiscretizeGraphics[
Text[Style["℘", Bold, FontFamily -> "Times"]], _Text];
dist = SignedRegionDistance@reg;
plot1 = ParametricPlot[t  {Cos[t], Sin[t]}, {t, -6, 6},
RegionFunction -> Function[{x, y}, dist@{x, y} < 0],
PlotStyle -> Yellow];
plot2 = ParametricPlot[t  {Cos[t], Sin[t]}, {t, -6, 6},
RegionFunction -> Function[{x, y}, dist@{x, y} > 0],
PlotStyle -> Cyan];
plot3 = ParametricPlot[t {Cos[t], Sin[t]}, {t, -6, 6},
MeshFunctions -> {Function[{x, y, t}, dist[t {Cos[t], Sin[t]}]]},
Mesh -> {{0}}, MeshStyle -> Red, PlotStyle -> None];
tvalues =
MeshCoordinates[
DiscretizeRegion[
ImplicitRegion[dist[t   {Cos[t], Sin[t]}] == 0, {t}]]] //
Flatten // Sort
g = Graphics[
MapIndexed[
Text[Style[Last@#2, FontSize -> 16],
Function[{t}, t  {Cos[t], Sin[t]}]@#1] &, tvalues]];
Show[reg, plot1, plot2, plot3, g]


{-2.74912, -2.21741, -0.583719, 0.378264, 1.64061, 1.82213, 2.23373, \ 2.74418}

• FindInstance can get some t but NSolve can not get any solution.
FindInstance[dist[t {Cos[t], Sin[t]}] == 0, {t}, Reals, 10]


{{t -> 0.378264}, {t -> -2.74912}, {t -> 1.82213}, {t -> -2.21741}, {t -> 2.74418}, {t -> 2.23373}, {t -> -0.583719}, {t -> -2.74912}, {t -> 1.64061}, {t -> 2.23373}}

• For the first example, we have to limit the range since the curve turn back.
tvalues =
MeshCoordinates[
DiscretizeRegion[
ImplicitRegion[dist[{Cos[t], t*Sin[t]}] == 0, {t}]]] //
Flatten // Sort;
tvalues = Select[tvalues, -6 < # < 1 &]


{-3.89678, -3.25197, -2.96861, -2.67844, -1.99205, -1.66586}

• Another way.
Clear["Global*"];
reg1 = BoundaryDiscretizeGraphics[
Text[Style["℘", Bold, FontFamily -> "Times"]], _Text];
reg2 = DiscretizeRegion@
ParametricRegion[{Cos[t], t*Sin[t]}, {{t, 0, 6}}];
reg12 = RegionIntersection[reg2, reg1];
list = MeshCells[reg12, 1][[;; , 1]];
indexes = (Flatten /@
Split[list, Last[#1] == First[#2] &])[[;; , {1, -1}]] // Flatten;
pts = MeshCoordinates[reg12][[Flatten@indexes]]
Graphics[{{LightOrange, reg1}, MeshPrimitives[reg2, 1],
MapIndexed[{Red, Point[#1],
Text[Style[First@#2, 16, Blue], #1, {-1, -1}]} &, pts]}]


• thank you for very instructive answer illustrating region functionality. +1 :) Commented Jun 2 at 2:09
• @ubpdqn Thanks. I don’t know why NSolve does not work. Commented Jun 2 at 2:16