Join each of your collections of lines using a RegionUnion
into a single region, then intersect both regions with RegionIntersection
like so:
redLines = {
Line[{{-2.`, 4.`}, {-1.5`, 2.25`}, {-1.`, 1.`}, {-0.5`, 0.25`}, {0.`, 0.`}, {0.5`, 0.25`}, {1.`, 1.`}, {1.5`, 2.25`}, {2.`, 4.`}}]
, Line[{{2, -1}, {2.5, 2}}]
};
blueLines = {
Line[{{22.`, -3.`}, {15.49`, -2.3`}, {9.96`, -1.6`}, {5.41`, -0.9`}, {1.84`, -0.2`}, {-0.75`, 0.5`}, {-2.36`, 1.2`}, {-2.99`, 1.9`}, {-2.64`, 2.6`}, {-1.31`, 3.3`}, {1.`, 4.`}, {4.29`, 4.7`}, {8.56`, 5.4`}, {13.81`, 6.1`}, {20.04`, 6.8`}}]
, Line[{{-3, 1}, {2, 2}}]
};
intersections = RegionIntersection[RegionUnion@redLines, RegionUnion@blueLines];
isectCoordinates = Flatten[MeshPrimitives[intersections, 0] /. Point -> List, 1];
Graphics[{Red, redLines, Blue, blueLines, Black, PointSize[Large],intersections},
PlotRange -> {{-3, 3}, {-5, 5}}]
And if you want to extract the lines from a shape (e.g square, triangle etc.) then use MeshPrimitives[shape, 1]
.