Как переместить масштабированную точку и сохранить форму кривой? - PullRequest
0 голосов
/ 28 мая 2020

Для кривой я хочу переместить начальную и конечную точки в новое положение, а затем как сохранить форму кривой?

image with points

Из точек, которые циркулируют на желтой кривой, переместите их в положение красной кривой, которая циркулирует на красной кривой, как сохранить форму кривой на красной кривой?

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Итак, позвольте мне резюмировать, что вы хотите здесь сделать: учитывая кривую Безье или кривую B-сплайна и два новых местоположения для начальной и конечной точек, найдите новую кривую Безье / B-сплайн, которая более или менее сохраняет ту же форму, что и исходная кривая.

Один из способов добиться этого - найти преобразование, которое преобразует начальную / конечную точки в их новые местоположения, затем вы можете применить то же преобразование ко всем другим контрольным точкам кривой. По сути, это то же самое, что найти преобразование между линией, определенной начальной точкой кривой P и конечной точкой Q, и другой линией, определенной местоположениями новых точек P * и Q *. Из P и P * мы можем найти вектор трансляции. Из линии PQ и линии P Q мы можем найти угол поворота. От длины | ПО | и длина | P Q | мы можем найти коэффициент масштабирования. Итак, объединив вектор переноса, угол поворота и масштабный коэффициент, мы сможем найти матрицу преобразования. Примените матрицу преобразования ко всем другим контрольным точкам, тогда вы сможете получить новую кривую, которая более или менее сохраняет ту же форму, что и исходная кривая.

Если вы действительно хотите компенсировать кривые, то это совсем другая история. Кривые смещения достигаются с помощью гораздо более сложного алгоритма (который я не буду здесь подробно описывать), и мы укажем расстояние смещения (может быть положительным или отрицательным, чтобы подразумевать смещение наружу / внутрь) вместо новых местоположений для начальной / конечной точек.

0 голосов
/ 29 мая 2020

Когда вы определяете сплайн-кривую, вам необходимо определить также углы касательных в конечных точках, когда вы перемещаете ваши точки в центр, вы меняете наклоны боковых линий, поэтому, если касательные углы фиксированы относительно линий, они изменят кривую. Если вы внимательно посмотрите, углы на обоих изображениях одинаковые. Чтобы сохранить форму ваших кривых, вам необходимо изменить эти углы в соответствии с изменениями наклона боковых линий.

...