Текущий архив: 2003.04.03;
Скачать: CL | DM;
ВнизОпределения пересечения двух кривых Безье Найти похожие ветки
← →
stray_XXX (2003-03-21 18:51) [0]Привет ! Столкнулся с такой проблеммой пользователь задает координаты начальной, конечной точки и рычагов. Рисую кривую Безье потом вторую. Как можно определить пересекаются ли две эти кривые. С отрезками все просто а вот как с кривыми.
{ Определяет пересечение отрезков A(ax1,ay1,ax2,ay2) и B (bx1,by1,bx2,by2),}
{ функция возвращает TRUE - если отрезки пересекаются, а если пересекаются }
{ в концах или вовсе не пересекаются, возвращается FALSE (ложь) }
function Intersection(ax1,ay1,ax2,ay2,bx1,by1,bx2,by2:integer):boolean;
var v1,v2,v3,v4:real;
begin
v1:=(bx2-bx1)*(ay1-by1)-(by2-by1)*(ax1-bx1);
v2:=(bx2-bx1)*(ay2-by1)-(by2-by1)*(ax2-bx1);
v3:=(ax2-ax1)*(by1-ay1)-(ay2-ay1)*(bx1-ax1);
v4:=(ax2-ax1)*(by2-ay1)-(ay2-ay1)*(bx2-ax1);
Intersection:=(v1*v2<0) and (v3*v4<0);
end;
← →
DVM (2003-03-21 19:05) [1]Приравнять, решить уравнение... Но это нереально.
Может перебрать все точки, проверить на принадлежность кривым?
← →
BANick (2003-03-21 20:47) [2]Узнать точку пересечения действительно трудно (кубическое уравнение разрешимо, но писать алгоритм я бы не стал), но узнать пересекаются они вобще или нет гораздо проще, правда быстро ответить на этот вопрос не могу, а времени у меня почти нет.
← →
MBo (2003-03-21 21:41) [3]спрямляешь кривые (делишь пополам, пока отклонение от прямых отрезков не будет в пределах допуска), дальше уже знаешь
Страницы: 1 вся ветка
Текущий архив: 2003.04.03;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.008 c