This is not a full answer, but it, perhaps, deals with the hardest part: constructing a set of finite lines lying all in one plane, but not intersecting each other.
appendLine[list_Symbol] := (list = RandomReal[10, {1, 2, 2}])
appendLine[list_List] := Module[{newline, test = True},
For[newline = RandomReal[10, {2, 2}], test,
test = !
AllTrue[Solve[
RegionMember[Line[newline], {x, y}] &&
RegionMember[Line[#], {x, y}]] & /@ list, Length@# == 0 &],
newline = RandomReal[10, {2, 2}]];
Append[list, newline]]
Run list = appendLine[list] n times to get n lines:
Do[list = appendLine[list], {n, 20}] // AbsoluteTiming
(* {4.099410, Null} *) <- (* quite slow for only 20 lines, unfortunately *)
Display:
Graphics[Line /@ list]

It's a cool model system to study, how depending on initial conditions, for example, all lines mostly orient themselves along a specific direction.
PS - a subsequent addition of 20 lines took 26 seconds, and the next line took another 1.4. Makes sense, as each new random line is more and more likely to intersect the previous ones, so more and more attempts to generate a new line need to be made, until one comes up that fits.
Line[{{RandomReal[],RandomReal[],z},{RandomReal[],RandomReal[],z}}]/.z->RandomReal[]– LLlAMnYP May 19 '15 at 14:07line1=RegionMember[Line[{{...}}],{x,y,z}];line2=RegionMember...;thenReduce[line1&&line2]. If it comes up with a solution, then they cross. – LLlAMnYP May 19 '15 at 14:17zs? Because with float random numbers of @LLlAMnYP 's comment, it's highly, highly unlikely that two lines will end up in the same plane. – egwene sedai May 19 '15 at 14:18lines = Partition[RandomReal[1, {100, 2}],2]; Solve[RegionMember[Line[First@lines], {x, y}] && RegionMember[Line[#], {x, y}]] & /@ Rest[lines] // AbsoluteTiming– LLlAMnYP May 19 '15 at 14:47lines = Partition[RandomReal[1, {100, 2}],2]; Solve[RegionMember[Line[First@lines], {x, y}] && RegionMember[Line[#], {x, y}]] & /@ Rest[lines]– Dimitris May 19 '15 at 15:07