Line-crossing Algorithm Implementation (pt. 2) [closed]

This is a continuation of the problem I posted earlier with the line-crossing algorithm that I tried to implement in Mathematica.

I took Kuba's suggestion, removing the underscore on everything except the xis and yis and also using Which to reduce the number of nested Ifs, but I seem to be back at square one in terms of the outputs that I get.

Here is my code:

Slope[{{x1_, y1_}, {x2_, y2_}}] := If[x1 == x2, Undefined, (y1 - y2)/(x1 - x2)]

ParallelVertical[{{p1 : {x1_, y1_}, p2 : {x2_, y2_}}, {p3 : {x3_, y3_}, p4 : {x4_, y4_}}}] :=
If[(Slope[p1, p2] == Undefined) && (Slope[p3, p4] == Undefined), True, False]

SegInter2[{{p1 : {x1_, y1_}, p2 : {x2_, y2_}}, {p3 : {x3_, y3_}, p4 : {x4_, y4_}}}] :=
(*Assume Min[x1,x2]<Min[x3,x4]*)
Which[Max[x1, x2] < Min[x3, x4](*No common x-coordinate*), False,
ParallelVertical[{p1, p2}, {p3, p4}](*Both lines vertical*), False,
Slope[p1, p2] == Undefined(*Line 1 vertical, line 2 not*),
If[(x3 - x1)*(x4 - x1) > 0(*p3&p4 on the same side of line 1*), False, True],
Slope[p3, p4] == Undefined(*Line 2 vertical, line 1 not*),
If[(x1 - x3)*(x2 - x3) > 0(*p1&p2 on the same side of line 2*), False, True],
True(*Otherwise*),
Module[{a1, a2}(*Define slopes a1&a2*),
a1 = Slope[{p1, p2}];
a2 = Slope[{p3, p4}];
If[a1 == a2(*Parallel*), False,
Module[{b1, b2, xa}(*Define y-intercepts b1&b2 and x-coordinate of intersection xa*),
b1 = y1 - a1*x1;
b2 = y3 - a2*x3;
xa = (b2 - b1)/(a1 - a2);
If[(xa < Max[Min[x1, x2], Min[x3, x4]]) || (xa > Min[Max[x1, x2], Max[x3, x4]])(*Intersection point not within range*), False, True]
](*End of module b1&b2&xa*)
](*End of outer If statement*)
](*End of module a1&a2*)
]

I've also attached the output as a picture below. I apologize if this is a simple question, I'm still very new to Mathematica and I've tried following the model set by the official Wolfram documentation but I'm clearly lost... closed as off-topic by Jason B., user9660, MarcoB, m_goldberg, Yves KlettJul 6 '16 at 6:55

This question appears to be off-topic. The users who voted to close gave this specific reason:

• "This question arises due to a simple mistake such as a trivial syntax error, incorrect capitalization, spelling mistake, or other typographical error and is unlikely to help any future visitors, or else it is easily found in the documentation." – Jason B., Community, MarcoB, m_goldberg, Yves Klett
If this question can be reworded to fit the rules in the help center, please edit the question.

• You have defined Slope and ParallelVertical to take a single argument but you are calling them with two arguments. – Simon Woods Jun 30 '16 at 20:54
• Also note that the result of any equation containing Undefined is Undefined. So for example Undefined == Undefined returns Undefined rather than True. – Simon Woods Jun 30 '16 at 21:03
• @SimonWoods D'oh! You're right, I really need to start using fewer brackets in my code to avoid confusion. What should I set as the output for Slope when I'm trying to specifically avoid having to deal with the 'dividing-by-0' error? Would ComplexInfinity work? – 2012ssohn Jun 30 '16 at 21:10
• You could use a string like "undefined". – Simon Woods Jun 30 '16 at 21:18
• @SimonWoods I just tried it, but the result is still not looking good. imgur.com/5c3fhlY – 2012ssohn Jun 30 '16 at 21:23