Advertisement
Guest User

Untitled

a guest
Feb 12th, 2013
522
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var start1 ={x: -2, y: -0.5}
  2. , end1 =    {x: 3,  y: 3}
  3. , start2 =  {x: 1,  y: 2}
  4. , end2 =    {x: 2,  y: -1.5};
  5.  
  6.  
  7.  
  8. function Point2f(start, type, end) {
  9.     if(type == '-') {
  10.         return {x: start.x - end.x, y: start.y - end.y}
  11.     }
  12.     else if(type == '*') {
  13.         return {x: start.x * end.x, y: start.y * end.y}
  14.     }
  15.     else if(type == '+') {
  16.         return {x: start.x + end.x, y: start.y + end.y}
  17.     }
  18.     else if(type == '/') {
  19.         return {x: start.x / end.x, y: start.y / end.y}
  20.     }
  21. }
  22.  
  23.  
  24. function intersection(start1, end1, start2, end2) {
  25.     var dir1 = Point2f(end1, '-', start1)
  26.     , dir2 = Point2f(end2, '-', start2);
  27.    
  28.     //считаем уравнения прямых проходящих через отрезки
  29.     var a1 = -dir1.y;
  30.     var b1 = +dir1.x;
  31.     var d1 = -(a1*start1.x + b1*start1.y);
  32.    
  33.     var a2 = -dir2.y;
  34.     var b2 = +dir2.x;
  35.     var d2 = -(a2*start2.x + b2*start2.y);
  36.    
  37.     //подставляем концы отрезков, для выяснения в каких полуплоскотях они
  38.     var seg1_line2_start = a2*start1.x + b2*start1.y + d2;
  39.     var seg1_line2_end = a2*end1.x + b2*end1.y + d2;
  40.    
  41.     var seg2_line1_start = a1*start2.x + b1*start2.y + d1;
  42.     var seg2_line1_end = a1*end2.x + b1*end2.y + d1;
  43.    
  44.     //если концы одного отрезка имеют один знак, значит он в одной полуплоскости и пересечения нет.
  45.     if (seg1_line2_start * seg1_line2_end >= 0 || seg2_line1_start * seg2_line1_end >= 0)
  46.     return false;
  47.    
  48.  
  49.     var u = seg1_line2_start / (seg1_line2_start - seg1_line2_end);
  50.    
  51.     var pin_out = Point2f({x: u, y: u}, '*', dir1);
  52.  
  53.     return Point2f(start1, '+', pin_out);
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement