PHP SVG как найти точки пересечения кривых. Часть 3

Пример программного построения выкройки фартука, но прежде о кривых Безье.

Эта статья продолжение двух тем:

  1. PHP SVG аналитическая геометрия. Часть 1
  2. PHP SVG построение кривых. Часть 2

Сегодня научимся решать задачи аналитической геометрии связанные с кривыми:
Задача 1. Найти пересечение квадратичной кривой Безье и прямой
Задача 2. Найти пересечение кубической кривой Безье и прямой
Задача 3. Найти пересечение квадратичной кривой Безье и окружности
Задача 4. Найти пересечение кубической кривой Безье и окружности
Задача 5. Найти длину квадратичной кривой Безье
Задача 6. Найти длину кубической кривой Безье

Для облегчения будем использовать ряд готовых функций (библиотеку gfp.php). Скачать архив с библиотекой и примерами.

Как найти точки пересечения квадратичной кривой Безье с прямой

Image Title

Функция Intersection_Bezier2Line() возвращает массив со значениями координат пересечения кривой и отрезком.
Пример:
$F_Array=Intersection_Bezier2Line($xP0,$yP0,$xP1,$yP1,$xP2,$yP3, $xA0,$yA0,$xA1,$yA1);
$xQ0=$F_Array[0];
$yQ0=$F_Array[1];
$xQ1=$F_Array[2];
$yQ1=$F_Array[3];

Online пример:

Кривая    
Точка1 (начало кривой): X: Y:
Точка2 (опорная точка): X: Y:
Точка3 (конец кривой): X: Y:
Отрезок    
Точка4: (Отрезок) X: Y:
Точка5: (Отрезок) X: Y:



Как найти точки пересечения кубической кривой Безье с прямой

Image Title

Функция Intersection_Bezier3Line() возвращает массив со значениями координат пересечения кривой и отрезком.
Пример:
$F_Array=Intersection_Bezier3Line($xP0,$yP0,$xP1,$yP1,$xP2,$yP2, $xP3,$yP3,$xA0,$yA0,$xA1,$yA1);
$xQ0=$F_Array[0];
$yQ0=$F_Array[1];
$xQ1=$F_Array[2];
$yQ1=$F_Array[3];

Online пример:

Кривая    
Точка1: (начало кривой) X: Y:
Точка2: (опорная точка) X: Y:
Точка3:(опорная точка) X: Y:
Точка4:(коней кривой) X: Y:
Отрезок    
Точка4: (Отрезок) X: Y:
Точка5: (Отрезок) X: Y:



Как найти точки пересечения квадратичной кривой Безье и окружности

Image Title

Функция Intersection_Bezier2Circle() возвращает массив со значениями координат пересечения кривой и отрезком.
Пример:
$F_Array=Intersection_Bezier2Circle($xP0,$yP0,$xP1,$yP1,$xP2,$yP2, $xC1,$yC1, $R);
$xQ0=$F_Array[0];
$yQ0=$F_Array[1];
$xQ1=$F_Array[2];
$yQ1=$F_Array[3];

Online пример:

Кривая    
Точка1 (начало кривой): X: Y:
Точка2 (опорная точка): X: Y:
Точка3 (конец кривой): X: Y:
Окружность    
Центр: X: Y:
Радиус:
R:  



Как найти точки пересечения кубической кривой Безье и окружности

Image Title

Функция Intersection_Bezier3Circle() возвращает массив со значениями координат пересечения кривой и отрезком.
Пример:
$F_Array=Intersection_Bezier3Circle($xP0,$yP0,$xP1,$yP1,$xP2,$yP2,$xP3,$yP3, $xC1,$yC1, $R);
$xQ0=$F_Array[0];
$yQ0=$F_Array[1];
$xQ1=$F_Array[2];
$yQ1=$F_Array[3];

Online пример:

Кривая    
Точка1: (начало кривой) X: Y:
Точка2: (опорная точка) X: Y:
Точка3:(опорная точка) X: Y:
Точка4:(коней кривой) X: Y:
Окружность    
Центр: X: Y:
Радиус:
R:  



Как найти длину квадратичной кривой Безье

Image Title

Функция length_Bezier2() возвращает значение длины кубической кривой Безье.
Пример:
$L=length_Bezier2($xP0,$yP0, $xP1,$yP1, $xP2,$yP2);

Online пример:

Кривая    
Точка1 (начало кривой): X: Y:
Точка2 (опорная точка): X: Y:
Точка3 (конец кривой): X: Y:



Как найти длину кубической кривой Безье

Image Title

Функция length_Bezier3() возвращает значение длины кубической кривой Безье.
Пример:
$L=length_Bezier3($xP0,$yP0, $xP1,$yP1, $xP2,$yP2, $xP3,$yP3);

Online пример:

Кривая    
Точка1: (начало кривой) X: Y:
Точка2: (опорная точка) X: Y:
Точка3:(опорная точка) X: Y:
Точка4:(коней кривой) X: Y:



Данные примеры PHP кода вы можете использовать для построения чертежей в формате SVG или разработки выкроек одежды. Бесплатные выкройки на “Портном блоге” реализованы с помощью описанных выше скриптов PHP.