Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool on_segment(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;
- return (val > 0)? 1: 2;
- }
- int calculate_intersections(){
- int intersections = 0;
- for(int i=0; i < number_colliders; i++){
- for(int j=i+1; j < number_colliders; j++){
- intersections += check_if_intersect(colliders[i], colliders[j]);
- }
- }
- return intersections;
- }
- int check_if_intersect(Collider c1, Collider c2){
- if(c1.src == c2.src || c1.tgt == c2.tgt || c1.src == c2.tgt || c1.tgt == c2.src){
- return 0;
- }
- int o1, o2, o3, o4;
- o1 = check_orientation(c1.src.point, c1.tgt.point, c2.src.point);
- o2 = check_orientation(c1.src.point, c1.tgt.point, c2.tgt.point);
- o3 = check_orientation(c2.src.point, c2.tgt.point, c1.src.point);
- o4 = check_orientation(c2.src.point, c2.tgt.point, c1.tgt.point);
- if (o1 != o2 && o3 != o4){
- return 1;
- }
- if (o1 == 0 && onSegment(c1.src.point, c1.tgt.point, c2.src.point)) return 1;
- if (o2 == 0 && onSegment(c1.src.point, c1.tgt.point, c2.tgt.point)) return 1;
- if (o3 == 0 && onSegment(c2.src.point, c2.tgt.point, c1.src.point)) return 1;
- if (o4 == 0 && onSegment(c2.src.point, c2.tgt.point, c1.tgt.point)) return 1;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement