Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- while (!Q.isEmpty()) {
- ExtPoint p = Q.poll();
- //left point of segment
- if (p.position == LEFT) {
- T.add(p.segment);
- //if intersect higher
- if (T.higher(p.segment) != null) {
- if (p.segment.color != T.higher(p.segment).color) {
- if (SegmentsIntersect(p.segment.start, p.segment.end, T.higher(p.segment).start, T.higher(p.segment).end)) {
- Q.add(CalculateIntersect(p.segment.start, p.segment.end, T.higher(p.segment).start, T.higher(p.segment).end, p.position, p.segment, T.higher(p.segment)));
- }
- }
- }
- //if intersect lower
- if (T.lower(p.segment) != null) {
- if (p.segment.color != T.lower(p.segment).color) {
- if (SegmentsIntersect(p.segment.start, p.segment.end, T.lower(p.segment).start, T.lower(p.segment).end)) {
- Q.add(CalculateIntersect(p.segment.start, p.segment.end, T.lower(p.segment).start, T.lower(p.segment).end, p.position, p.segment, T.lower(p.segment)));
- }
- }
- }
- //right point of a segment
- } else if (p.position == RIGHT) {
- if (T.higher(p.segment) != null && T.lower(p.segment) != null) {
- if (T.higher(p.segment).color != T.lower(p.segment).color) {
- if (SegmentsIntersect(T.higher(p.segment).start, T.higher(p.segment).end, T.lower(p.segment).start, T.lower(p.segment).end)) {
- ExtPoint myEt = CalculateIntersect(T.higher(p.segment).start, T.higher(p.segment).end, T.lower(p.segment).start, T.lower(p.segment).end, p.position, p.segment, T.lower(p.segment));
- if (!Q.contains(myEt)) Q.add(myEt);
- }
- }
- }
- T.remove(p.segment);
- } else {
- //if its intersection
- count++;
- if (T.higher(p.segment) != null && T.lower(p.segment) != null) {
- //swap elements
- Segment s1 = T.higher(p.segment);
- Segment s2 = T.lower(p.segment);
- T.remove(s1);
- T.remove(s2);
- T.add(s1);
- T.add(s2);
- Segment segA = T.higher(s2);
- Segment segB = T.lower(s1);
- if (SegmentsIntersect(s2.start, s2.end, segA.start, segA.end)) {
- ExtPoint myEt = CalculateIntersect(s2.start, s2.end, segA.start, segA.end, p.position, s2, segA);
- if (!Q.contains(myEt)) Q.add(myEt);
- }
- if (SegmentsIntersect(s1.start, s1.end, segB.start, segB.end)) {
- ExtPoint myEt = CalculateIntersect(s1.start, s1.end, segB.start, segB.end, p.position, s1, segB);
- if (!Q.contains(myEt)) Q.add(myEt);
- }
- Q.remove(p);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement