#BezierMathUtils
Класс BezierMathUtils предназначен для предоставления математических формул, необходимых для вычисления биэзеровых кривых.
Например, существует следующий запрос:
Есть две точки A и B, требуется переместить некоторый объект с точки A в точку B. Метод перемещения должен быть основан на биэзеровой кривой.
Здесь ключевой задачей является нахождение подходящего контрольной точки M (или M') между точками A и B.
Два метода, предоставленные данной библиотекой, предназначены для решения этой проблемы:
public static function calculateABLinePerpendicularBisectorPointByOffsetPercent(...){}
public static function calculateABLinePerpendicularBisectorPoint(...){}
Оба этих метода используются для определения координат точки M, которая затем используется как контрольная точка для биэзеровой кривой.
Указаны координаты двух точек A и B, а также расстояние от точки M до середины отрезка AB.
Точка M должна удовлетворять следующим условиям:
Она должна находиться на перпендикулярной биссектрисе прямой AB;
Расстояние MO от точки M до середины отрезка AB должно быть постоянным значением, которое указано при вызове функции;
Вид указания этого значения может быть двумя способами:
- Прямое указание смещения (не рекомендуется) Внимание: функция
calculateABLinePerpendicularBisectorPoint
принимает значение offset в квадрате;
- Указание смещения как процента от длины отрезка AB; функция:
calculateABLinePerpendicularBisectorPointByOffsetPercent
.
Внимание! Ниже представлены принципы реализации алгоритма, они могут быть полезны только тем, кто имеет базовое понимание математики средней школы.
Нахождение вертикальной биссектрисы отрезка AB Формула: y=-((x2-x1)/(y2-y1)) *[x-(x1+x2)/2]+(y1+y2)/2
- Здесь стоит отметить, что ссылка на страницу Бaidu была исправлена, так как она содержала ошибку в скобках. Также было замечено, что функция вертикальной биссектрисы линейной алгебры должна удовлетворять условию: любая точка M на этой линии находится на одинаковом расстоянии от концов отрезка AB.
- Поэтому можно установить равенство => ( X - Ax )^2 + ( Y - Ay )^2 = ( X - Bx )^2 + ( Y - By )^2
- После преобразования получаем =>
- y = [(Ax^2 + Ay^2) - (Bx^2 + By^2)] / 2 * (Ay - By) - (Ax - Bx) / (Ay - By) X
- Я использовал эту формулу для нескольких наборов данных, все они были корректными, но в коде из-за слишком больших чисел возникало переполнение типа Number. Поэтому эта формула не подходит для вычислений. На сайте найденная формула должна быть упрощенной версией моей формулы, но точно это не известно. Если кто-то знает, пожалуйста, сообщите мне, спасибо.
Решение:
Исходя из формулы 3 мы можем найти координаты середины отрезка AB, обозначим эти координаты E и F соответственно:
(X-E)^2 + (Y-F)^2 = offset^2
Подставив эти два уравнения вместе, мы можем решить для последнего X и Y.
Поскольку это стандартное уравнение второй степени вида AX^2 + BX + C = 0, то его решение будет иметь два значения, что видно на самом верхнем изображении.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )