Ни дня без строчки!

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

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

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

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

точки пересечения

Функция 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:

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

точки пересечения

Функция 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:

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

точки пересечения

Функция 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:    

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

точки пересечения

Функция 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:    

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

как вычислить длину кривой

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

Online пример:

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

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

кубическая кривая длина

Функция 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.

Смотри также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

 
Архивы
Подписка на рассылку новостей

 © 2014-2020. Александр Корягин, Кременчуг, Украина