Вычисление кубического Bézier с известной средней точкой

Ваш набор просмотра имеет класс разрешений IsAuthenticated. Другими словами, пользователь должен пройти аутентификацию, чтобы получить, обновить или даже создать экземпляр. Убедитесь, что соответствующие заголовки включены в ваши запросы.

Например, для аутентификации токена, как указано в документации Django Rest Framework

Для аутентификации клиентов ключ токена должен быть включен в заголовок HTTP авторизации. Ключу должен предшествовать строковый литерал «Token», с пробелами, разделяющими две строки. Например:

Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

blockquote>

В конкретном случае создания учетной записи я не уверен, что для вашего приложения требуется аутентификация пользователя. [ 117]

5
задан Naaff 7 July 2009 в 20:33
поделиться

2 ответа

Скажем, Ваши наклоны нормализованы, затем для некоторого u, v Вы имеют

u * slope(a->b)+a = b, v * slope(c->d)+d = c

Вы знаете значения a, d, и q:=(a+b+c+d)/8 (средняя точка кривой) так c = 8(q-a-d-b)

при включении вышеупомянутых уравнений в последнем Вы добираетесь

v * slope(c->d)+d = 8(q-a-d-a-u * slope(a->b))

который является 2 уравнениями (2-е векторное уравнение) в двух переменных (u, v)

Вам не нужен третий наклон.

1
ответ дан 15 December 2019 в 06:37
поделиться

Я знаю, что это старый вопрос, но на него нет правильного или полного ответа, поэтому я решил предложить решение. Обратите внимание, что вычисления Дэвида содержат несколько ошибок, и его решение является неполным, даже если эти ошибки исправлены.

Сначала определите векторы T0 , T1 и T2 , используя три наклона:

T0 = ( b - a ) / u0
T1 = ( c - b ) / u1
T2 = ( d - c ) / u2

Если бы мы знали как направление , так и расстояние между каждой парой контрольных точек, то нам не понадобились бы масштабные коэффициенты u0 , u1 и u2 . Поскольку нам известен только наклон, то u0 , u1 и u2 являются неизвестными скалярными величинами. Также мы предполагаем, что u0 , u1 и u2 не равны нулю, поскольку наклон определен.

Мы можем переписать эти уравнения несколькими разными способами, чтобы получить выражения для каждой контрольной точки в терминах других контрольных точек. Например:

b = a + T0*u0
c = b + T1*u1
d = c + T2*u2

В вопросе также говорится, что у нас есть «середина» кубической кривой Безье. Я понимаю, что это означает, что у нас есть точка в середине диапазона параметров кривой. Я назову эту точку p :

p = ( a + 3*b + 3*c + d ) / 8

Перезапись с неизвестными в левой части дает:

b + c = ( 8*p - a - d ) / 3

Теперь мы можем заменить b и c в различные способы использования более ранних выражений. Оказывается, неоднозначности возникают, когда у нас есть параллельные векторы T0 , T1 или T2 . Необходимо рассмотреть четыре случая.

Случай 1: T0 не параллелен T1

Заменить b = a + T0 * u0 и c = a + T0 * u0 + T1 * u1 и решить для u0 и u1 :

2*T0*u0 + T1*u1 = ( 8*p - 7*a - d ) / 3

Это два уравнения и два неизвестных, поскольку T0 и T1 являются векторами. Подставьте u0 и u1 обратно в b = a + T0 * u0 и c = a + T0 * u0 + T1 * u1 на получить недостающие контрольные точки b и c .

Случай 2: T1 не параллелен T2

Заменить c = d - T2 * u2 и b = d - T2 * u2 - T1 * u1 и решите относительно u1 и u2 :

T1*u1 + 2*T2*u2 = ( a + 7*d - 8*p ) / 3

Случай 3: T0 не параллельна T2

Подставьте b = a + T0 * u0 и c = d - T2 * u2 и решите для u0 и u2 :

T0*u0 - T2*u2 = ( 8*p - 4*a - 4*d ) / 3

Случай 4: T0 , T1 и T2 все параллельны

В этом случае a , b , c и d все коллинеарны, а T0 , T1 и T2 все эквивалентны в пределах масштабного коэффициента. Недостаточно информации для получения уникального решения. Одним из простых решений было бы просто выбрать b , установив u0 = 1 :

b = a + T0
(a + T0) + c = ( 8*p - a - d ) / 3
c = ( 8*p - 4*a - d - 3*T0 ) / 3

Существует бесконечное количество решений. По сути, выбор b определяет c или выбор c будет определять b .

Расширение до 3D

Вопрос, конкретно заданный о плоском Кривые Безье, но я думаю, что интересно отметить, что точка p не требуется при распространении этой проблемы на неплоскую трехмерную кубическую кривую Безье. В этом случае мы можем просто решить это уравнение для u0 , u1 и u2 :

T0*u0 + T1*u1 + T2*u2 = d - a

Это три уравнения (векторы трехмерные) и три неизвестные ( u0 , u1 и u2 ). Подстановка в b = a + T0 * u0 и c = b + T1 * u1 или c = d - T2 * u2 дает b и c .

Расширение до 3D

Вопрос, конкретно заданный о плоских кривых Безье, но я думаю, что интересно отметить, что точка p не является необходимой при распространении этой проблемы на неплоскую трехмерную кубическую кривую Безье кривая. В этом случае мы можем просто решить это уравнение для u0 , u1 и u2 :

T0*u0 + T1*u1 + T2*u2 = d - a

Это три уравнения (векторы трехмерные) и три неизвестные ( u0 , u1 и u2 ). Подстановка в b = a + T0 * u0 и c = b + T1 * u1 или c = d - T2 * u2 дает b и c .

Расширение до 3D

Вопрос, конкретно заданный о плоских кривых Безье, но я думаю, что интересно отметить, что точка p не является необходимой при распространении этой проблемы на неплоскую трехмерную кубическую кривую Безье кривая. В этом случае мы можем просто решить это уравнение для u0 , u1 и u2 :

T0*u0 + T1*u1 + T2*u2 = d - a

Это три уравнения (векторы трехмерные) и три неизвестные ( u0 , u1 и u2 ). Подстановка в b = a + T0 * u0 и c = b + T1 * u1 или c = d - T2 * u2 дает b и c .

Интересно отметить, что точка p не нужна при распространении этой проблемы на неплоскую трехмерную кубическую кривую Безье. В этом случае мы можем просто решить это уравнение для u0 , u1 и u2 :

T0*u0 + T1*u1 + T2*u2 = d - a

Это три уравнения (векторы трехмерные) и три неизвестные ( u0 , u1 и u2 ). Подстановка в b = a + T0 * u0 и c = b + T1 * u1 или c = d - T2 * u2 дает b и c .

Интересно отметить, что точка p не нужна при распространении этой проблемы на неплоскую трехмерную кубическую кривую Безье. В этом случае мы можем просто решить это уравнение для u0 , u1 и u2 :

T0*u0 + T1*u1 + T2*u2 = d - a

Это три уравнения (векторы трехмерные) и три неизвестные ( u0 , u1 и u2 ). Подстановка в b = a + T0 * u0 и c = b + T1 * u1 или c = d - T2 * u2 дает b и c .

u1 и u2 ). Подстановка в b = a + T0 * u0 и c = b + T1 * u1 или c = d - T2 * u2 дает b и c .

u1 и u2 ). Подстановка в b = a + T0 * u0 и c = b + T1 * u1 или c = d - T2 * u2 дает b и c .

2
ответ дан 15 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: