Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var start1 ={x: -2, y: -0.5}
- , end1 = {x: 3, y: 3}
- , start2 = {x: 1, y: 2}
- , end2 = {x: 2, y: -1.5};
- function Point2f(start, type, end) {
- if(type == '-') {
- return {x: start.x - end.x, y: start.y - end.y}
- }
- else if(type == '*') {
- return {x: start.x * end.x, y: start.y * end.y}
- }
- else if(type == '+') {
- return {x: start.x + end.x, y: start.y + end.y}
- }
- else if(type == '/') {
- return {x: start.x / end.x, y: start.y / end.y}
- }
- }
- function intersection(start1, end1, start2, end2) {
- var dir1 = Point2f(end1, '-', start1)
- , dir2 = Point2f(end2, '-', start2);
- //считаем уравнения прямых проходящих через отрезки
- var a1 = -dir1.y;
- var b1 = +dir1.x;
- var d1 = -(a1*start1.x + b1*start1.y);
- var a2 = -dir2.y;
- var b2 = +dir2.x;
- var d2 = -(a2*start2.x + b2*start2.y);
- //подставляем концы отрезков, для выяснения в каких полуплоскотях они
- var seg1_line2_start = a2*start1.x + b2*start1.y + d2;
- var seg1_line2_end = a2*end1.x + b2*end1.y + d2;
- var seg2_line1_start = a1*start2.x + b1*start2.y + d1;
- var seg2_line1_end = a1*end2.x + b1*end2.y + d1;
- //если концы одного отрезка имеют один знак, значит он в одной полуплоскости и пересечения нет.
- if (seg1_line2_start * seg1_line2_end >= 0 || seg2_line1_start * seg2_line1_end >= 0)
- return false;
- var u = seg1_line2_start / (seg1_line2_start - seg1_line2_end);
- var pin_out = Point2f({x: u, y: u}, '*', dir1);
- return Point2f(start1, '+', pin_out);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement