Показать сообщение отдельно
Старый 07.08.2014, 15:01
MrFOX вне форума Посмотреть профиль Отправить личное сообщение для MrFOX Найти все сообщения от MrFOX
  № 1  
Ответить с цитированием
MrFOX

Регистрация: Aug 2014
Сообщений: 6
По умолчанию Точка пересечения двух отрезков

Вот код:

Код AS3:
import flash.display.Shape;
 
//Создаем первый отрезок...
var Line1:Shape = new Shape  ;
addChild(Line1);
var Line1x1 = 160; //Начальная точка по оси Х для первого отрезка
var Line1y1 = 300; //Начальная точка по оси Y для первого отрезка
var Line1x2 = 150; //Конечная точка по оси Х для первого отрезка
var Line1y2 = 100; //Конечная точка по оси Y для первого отрезка
Line1.graphics.clear();
Line1.graphics.lineStyle(0, 0x00FF00, 1);
Line1.graphics.moveTo(Line1x1, Line1y1);
Line1.graphics.lineTo(Line1x2, Line1y2);
var angle1 = Math.atan2(Line1y2 - Line1y1, Line1x2 - Line1x1) / (Math.PI / 180); //Угол первого отрезка
 
//Создаем второй отрезок...
var Line2:Shape = new Shape  ;
addChild(Line2);
var Line2x1 = 195; //Начальная точка по оси Х для второго отрезка
var Line2y1 = 355; //Начальная точка по оси Y для второго отрезка
var Line2x2 = 100; //Конечная точка по оси Х для второго отрезка
var Line2y2 = 100; //Конечная точка по оси Y для второго отрезка
Line2.graphics.clear();
Line2.graphics.lineStyle(0, 0x0000FF, 1);
Line2.graphics.moveTo(Line2x1, Line2y1);
Line2.graphics.lineTo(Line2x2, Line2y2);
var angle2 = Math.atan2(Line2y2 - Line2y1, Line2x2 - Line2x1) / (Math.PI / 180); //Угол второго отрезка
 
var k1 = Math.tan(angle1 * Math.PI / 180);
var b1 = Line1y2 - k1 * Line1x2;
 
var k2 = Math.tan(angle2 * Math.PI / 180);
var b2 = Line2y2 - k2 * Line2x2;
 
var x0 = (b1 - b2) / (k2 - k1);
var y0 = k1 * x0 + b1;
 
if (((x0>=Line1x1 && x0<=Line1x2) || (x0<=Line1x1 && x0>=Line1x2)) && ((y0>=Line1y1 && y0<=Line1y2) || (y0<=Line1y1 && y0>=Line1y2)))
{
   var line1B = true;
}
if (((x0>=Line2x1 && x0<=Line2x2) || (x0<=Line2x1 && x0>=Line2x2)) && ((y0>=Line2y1 && y0<=Line2y2) || (y0<=Line2y1 && y0>=Line2y2)))
{
   var line2B = true;
}
if (line1B && line2B)
{
   trace("x0 = " + x0)
   trace("y0 = " + y0)
}
Цель кода:Найти точку пересечения двух отрезков.

Код вроде работает хорошо, но если начальную координату Х для первого отрезка (переменная Line1x1) на 150, то точка пересечения этих отрезков не находиться, хотя визуально она есть.
Прошу помочь с кодом.


Последний раз редактировалось MrFOX; 07.08.2014 в 20:11.