Определите контрольные точки кривой Безье - PullRequest
0 голосов
/ 25 мая 2020

Я использую формулу Безье для определения контрольных точек кривой, которая создается из 6 точек, выбранных из облака точек (COP). COP описывает кривизну профиля (верхний изгиб).

Согласно формуле и литературе контрольные точки (n = 5) описывают верхний изгиб профиля. Кажется, что в формуле где-то есть ошибка , потому что кривая Безье не соответствует верхнему изгибу, генерируемому облаком точек.

Есть ли у кого-нибудь идея улучшить формулу? Я не могу найти ошибку ...

спасибо, и я с нетерпением жду вашего ответа, лучше

import numpy as np
from numpy.linalg import inv

# start and end point of airfoil
p0 = .030 
p5 = 0 


 # x position of knot
f = 3.48
g = 7.65
h = 8.06
j = 5.75


# ratio
u = 0.04
v = .2376
w = .4670
r = .699862

c = f-((1-u)**5*p0+u**5*p5)
d = g-((1-v)**5*p0+v**5*p5)
e = h-((1-w)**5*p0+w**5*p5)
k = j-((1-r)**5*p0+r**5*p5)

A = np.array([[5*(1-u)**4*u, 10*(1-u)**3*u**2, 10*(1-u)**2*u**3, 5*(1-u)*u**4],
              [5*(1-v)**4*v, 10*(1-v)**3*v**2, 10*(1-v)**2*v**3, 5*(1-v)*v**4],
              [5*(1-w)**4*w, 10*(1-w)**3*w**2, 10*(1-w)**2*w**3, 5*(1-w)*w**4],
              [5*(1-r)**4*r, 10*(1-r)**3*r**2, 10*(1-r)**2*r**3, 5*(1-r)*r**4]])
inverse = np.linalg.inv(A)

b =([c,d,e,k])

print(np.dot(inverse,b))

введите описание изображения здесь

Если хотите, я могу распределить координаты профиля ... enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...