![]() |
|
||||||||||
|
|||||
|
Известны координаты начала и конца Отрезка A и начала и конца Отрезка B. Необходимо узнать пересекаются ли они и есла да - то в какой точке. (ax1,ay1) (ax2,ax2) (bx1,by1) (bx2,by2)
Помогите плз. |
|
|||||
|
Регистрация: May 2006
Адрес: Город О
Сообщений: 169
|
О, уравнения ))
1. Составить уравнение прямой для каждого отрезка. 2.Поскольку получатся простые линейные функции - благополучно написать алгоритм, который решит систему линейных уравнений. Решение дас два числа - икс и игрек. Это будет точка пересечения прямых, на которой лежат отрезки. И проверить если эта точка входит в множество точек для каждого отрезка - стало быть пересекаются отрезки именно в этой точке. А если не входит хотябы в один - значит не пересекаются. (Со множеством все довольно просто - координаты точки должны лежать между координатами концов отрезков для каждого отдельного случая (по иксам и по игрекам) Готового решения у меня нет - но алгоритм таков. |
|
|||||
|
Регистрация: Sep 2006
Адрес: Zaporozhye, Ukraine
Сообщений: 141
|
|
|
|||||
|
|
|
|||||
|
А вот мой вариант:
onClipEvent (load) {
drow = false;
number = 0;
_root.my_clip._x = this._x;
_root.my_clip._y = this._y;
_root._quality = "BEST";
_root.createEmptyMovieClip('my_clip', 0);
}
onClipEvent (mouseDown) {
if (drow == false) {
if (number == 2) {
_root.createEmptyMovieClip('my_clip', 0);
number = 0;
}
if (number == 0) {
ax1 = _root._xmouse;
ay1 = _root._ymouse;
}
if (number == 1) {
bx1 = _root._xmouse;
by1 = _root._ymouse;
}
c = 16777215*Math.random();
_root.my_clip.lineStyle(2, c, 100);
_root.my_clip.moveTo(_root._xmouse, _root._ymouse);
_x = _root._xmouse;
_y = _root._ymouse;
drow = true;
} else {
if (number == 0) {
ax2 = _root._xmouse;
ay2 = _root._ymouse;
}
if (number == 1) {
bx2 = _root._xmouse;
by2 = _root._ymouse;
k1 = (ay1-ay2)/(ax1-ax2);
b1 = ay1-k1*ax1;
k2 = (by1-by2)/(bx1-bx2);
b2 = by1-k2*bx1;
if (k1 == k2) {
if (b1 == b2) {
trace('DA, Sovpadaut');
} else {
trace('NET!');
}
} else {
x = (b1-b2)/(k2-k1);
y = (k2*b1-k1*b2)/(k2-k1);
if ((x>=((ax1<ax2) ? ax1 : ax2)) & (x>=((bx1<bx2) ? bx1 : bx2)) & (x<=((ax1>ax2) ? ax1 : ax2)) & (x<=((bx1>bx2) ? bx1 : bx2)) & (y>=((ay1<ay2) ? ay1 : ay2)) & (y>=((by1<by2) ? by1 : by2)) & (y<=((ay1>ay2) ? ay1 : ay2)) & (y<=((by1>by2) ? by1 : by2))) {
trace('DA');
} else {
trace('NET');
}
}
}
_root.my_clip.moveTo(this._x, this._y);
_root.my_clip.lineTo(_root._xmouse, _root._ymouse);
_x = _root._xmouse;
_y = _root._ymouse;
drow = false;
number += 1;
}
}
onClipEvent (enterFrame) {
if (drow == false) {
_x = _root._xmouse;
_y = _root._ymouse;
}
}
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Romias, в это разделе запрещено использование команд семилетней давности.
|
|
|||||
|
Регистрация: Jun 2006
Сообщений: 107
|
_root.createEmptyMovieClip("clip", 1);
clip.lineStyle(0, 0x000000, 100);
line1 = {};
line1.m = 1;
line1.b = 100;
line2 = {};
line2.m = 3;
line2.b = 50;
function findY(line, x) {
var y = line.m*x+line.b;
return y;
}
function drawLine(line)
var x = 300;
var y = findY(line, x);
var x = 0;
var y = findY(line, x);
clip.lineTo(x, y);
}
function findIntersection(line_a, line_b) {
var x = (line_b.b-line_a.b)/(line_a.m-line_b.m);
var y = line_a.m*x+line_a.b;
dot._x = x;
dot._y = y;
}
drawLine(line1);
drawLine(line2);
findIntersection(line1, line2);
Последний раз редактировалось N!kE; 06.01.2007 в 09:25. |
|
|||||
|
Romias, N!kE - садитесь, 2!
учите планиметрию и AS. |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:53. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|