Code:
// These lines should not intersect
p1 = {-4, -2}, q1 = {4, 4};
p2 = {4, 0}, q2 = {4, 4};
doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n";
std::cout << "\n\n\n\n\n\n\n\n";
// These lines should not intersect
p1 = {-4, -2}, q1 = {4, 4};
p2 = {4, 0}, q2 = {4, 4};
doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n";
// No intersection
p1 = {1, 4}, q1 = {2, 2};
p2 = {2, 2}, q2 = {2, 1};
doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n";
// No intersection
p1 = {1, 4}, q1 = {-1, 5};
p2 = {-1, 5}, q2 = {2, 1};
doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n";
// No intersection
p1 = {1, 4}, q1 = {2, 2};
p2 = {2, 2}, q2 = {2, 1};
doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n";
std::cout << "\n\n\n\n\n\n\n\n";
// Intersects
p1 = {10, 0}, q1 = {0, 10};
p2 = {0, 0}, q2 = {10, 10};
doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n";
// No intersect
p1 = {-5, -5}, q1 = {0, 0};
p2 = {1, 1}, q2 = {10, 10};
doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n";
std::cout << "\n\n\n\n\n\n\n\n";
// No touch
p1 = {-4, 6}, q1 = {-4, 4};
p2 = {-4, 5}, q2 = {-2, 5};
doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n";
// No intersect
p1 = {-6, 5}, q1 = {-4, 5};
p2 = {-4, 6}, q2 = {-2, 4};
doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n";
std::cout << std::string(4, '\n');
// Intersection
p1 = {-6, 1}, q1 = {-4, 3};
p2 = {-6, 2}, q2 = {-4, 2};
doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n";
// No intersection (totally off)
p1 = {-6, 2}, q1 = {-4, 2};
p2 = {-5, 1}, q2 = {-4, 0};
doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n";
// No touch
p1 = {-6, 2}, q1 = {-4, 2};
p2 = {-4, 2}, q2 = {-4, 4};
doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n";
// No touch
p1 = {-6, -2}, q1 = {-4, -2};
p2 = {-4, -2}, q2 = {-4, -4};
doIntersect(p1, q1, p2, q2)? cout << "Yes\n": cout << "No\n";
Output: