Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

a. Write a C++ and OpenGL program to compute and draw the point of the intersect

ID: 3829392 • Letter: A

Question

a. Write a C++ and OpenGL program to compute and draw the point of the intersection of two segments. Segment end points should be defined using mouse clicks.

b. Improve your program so that it handles more than two segments and computes the intersections of all the segments

(4 line segments intersecting in four points)

Example: trace segments s1 and s2, then compute and visualize their intersection. Trace segment s3, then check and visualize its intersections (if any) with segments s1 and s2. Trace segment s4, then check and visualize its intersections (if any) with segments s1, s2 and s3.

Explanation / Answer

#include <iostream>
using namespace std;

struct Point
{
int x;
int y;
};

bool onSegment(Point p, Point q, Point r)
{
if (q.x <= max(p.x, r.x) && q.x >= min(p.x, r.x) &&
q.y <= max(p.y, r.y) && q.y >= min(p.y, r.y))
return true;

return false;
}

int orientation(Point p, Point q, Point r)
{
int val = (q.y - p.y) * (r.x - q.x) -
(q.x - p.x) * (r.y - q.y);

if (val == 0) return 0; // colinear

return (val > 0)? 1: 2; // clock or counterclock wise
}

bool doIntersect(Point p1, Point q1, Point p2, Point q2)
{
int o1 = orientation(p1, q1, p2);
int o2 = orientation(p1, q1, q2);
int o3 = orientation(p2, q2, p1);
int o4 = orientation(p2, q2, q1);

// General case
if (o1 != o2 && o3 != o4)
return true;

if (o1 == 0 && onSegment(p1, p2, q1)) return true;

if (o2 == 0 && onSegment(p1, q2, q1)) return true;

if (o3 == 0 && onSegment(p2, p1, q2)) return true;

if (o4 == 0 && onSegment(p2, q1, q2)) return true;

return false; // Doesn't fall in any of the above cases
}

// Driver program to test above functions
int main()
{
struct Point p1 = {1, 1}, q1 = {10, 1};
struct Point p2 = {1, 2}, q2 = {10, 2};

doIntersect(p1, q1, p2, q2)? cout << "Yes ": cout << "No ";

p1 = {10, 0}, q1 = {0, 10};
p2 = {0, 0}, q2 = {10, 10};
doIntersect(p1, q1, p2, q2)? cout << "Yes ": cout << "No ";

p1 = {-5, -5}, q1 = {0, 0};
p2 = {1, 1}, q2 = {10, 10};
doIntersect(p1, q1, p2, q2)? cout << "Yes ": cout << "No ";

return 0;
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Chat Now And Get Quote