Как переместить масштабированную точку и сохранить форму кривой?
2 ответа
Итак, позвольте мне резюмировать, что вы хотите здесь сделать: учитывая кривую Безье или кривую B-сплайна и два новых местоположения для начальной и конечной точек, найдите новую кривую Безье /B-сплайн, которая более или менее остается неизменной. форма как исходная кривая.
Один из способов добиться этого - найти преобразование, которое преобразует начальную / конечную точки в их новые местоположения, затем вы можете применить такое же преобразование ко всем другим контрольным точкам кривой. По сути, это то же самое, что найти преобразование между линией, определенной начальной точкой кривой P и конечной точкой Q, и другой линией, определенной местоположениями новых точек P* и Q*. Из P и P* мы можем найти вектор трансляции. По прямой PQ и прямой PQ мы можем найти угол поворота. От длины | ПО | и длина |PQ| мы можем найти коэффициент масштабирования. Итак, объединив вектор переноса, угол поворота и масштабный коэффициент, мы сможем найти матрицу преобразования. Примените матрицу преобразования ко всем другим контрольным точкам, тогда вы сможете получить новую кривую, которая более или менее сохраняет ту же форму, что и исходная кривая.
Если вы действительно хотите компенсировать кривые, то это совсем другая история. Кривые смещения достигаются с помощью гораздо более сложного алгоритма (который я не буду здесь подробно описывать), и мы укажем расстояние смещения (может быть положительным или отрицательным, что подразумевает смещение наружу / внутрь) вместо новых местоположений для начальной / конечной точек.
Когда вы определяете сплайновую кривую, вам необходимо определить также углы касательных в конечных точках, когда вы перемещаете ваши точки в центр, вы меняете наклоны боковых линий, поэтому, если касательные углы фиксированы относительно линий, они будут изменять кривую. Если вы внимательно посмотрите, углы на обоих изображениях одинаковые. Чтобы сохранить форму ваших кривых, вам необходимо изменить эти углы в соответствии с изменениями наклона боковых линий.