Algoritmo para encontrar o centro de uma curva de Bezier

8

Preciso encontrar o centro de uma curva de Bezier para girá-la. Eu tenho uma lista de todos os pontos (pontos de controle, começo e fim, todos os pontos na própria curva). Como eu iria encontrar seu centro?

user4656
fonte
4
As curvas são entidades matemáticas que não possuem centros como tais. No entanto, você pode estar procurando Bouding caixa centro, centro mínimos caixa delimitadora, o centro de gravidade da área fechada subjacente à curva quando terminais estão conectados, centro de gravidade da polybeziers fechados, curva de ponto médio, ponto de controle média etc.
joojaa
11
@joojaa existem definitivamente 2 centros naturais em que consigo pensar, um é o t=0.5ponto. e dois é o ponto médio geométrico em relação à distância cartesiana da viagem ao longo da linha.
v.oddou
11
@ v.oddou sim, de fato, existem muitos outros motivos pelos quais a questão precisa de esclarecimentos. Todos os aplicativos de vetor que eu usei (Illustrator, xara, corel, sketch, etc.) Use o centro da caixa delimitadora local para girar objetos; portanto, é raro ver as outras definições de centro usadas.
Joojaa

Respostas:

14

As curvas de Bézier são entidades matemáticas e não possuem um centro claramente definido. De fato, pode-se definir muitas coisas diferentes como o centro da curva de Bézier. Tentei descrever alguns dos possíveis centros da imagem 1. Existem mais do que isso.

insira a descrição da imagem aqui

Imagem 1 : Alguns dos possíveis centros de uma única curva de Bézier

Na prática, quase todos os aplicativos gráficos voltados para desenho usam o centro da caixa delimitadora local (BB) como centro. O software de animação geralmente possui um conceito adicional de pivô, de modo que eles usam a abordagem de perguntar ao usuário, se nenhuma entrada for feita, eles frequentemente reverterão para o centro do BB ou simplesmente para o centro de coordenadas local. Isso provavelmente ocorre porque o BB precisa ser calculado de qualquer maneira e obter seu centro é muito fácil de fazer (consulte A Primer on Bézier Curves ).

As métricas do centro de gravidade também são um tanto naturais, especialmente em um contexto de animação, embora mais desagradável de calcular. Ser mais fácil discretizar os dados e fazer o cálculo na entrada discreta. Dito isto, algumas soluções de forma fechada são possíveis para o centro de gravidade da curva, mas não é uma equação muito agradável formular e simplificar.

Então temos os pontos da curva: o ponto médio pelo comprimento do arco e o ponto em que o parâmetro é 0,5. Na minha opinião, o parâmetro é frequentemente problemático, embora fácil de calcular, e perde significado quando você liga vários Béziers um após o outro por um polibézier. O centro do comprimento, é claro, é natural, desde que a curva não esteja fechada.tt

Também definimos outros centros possíveis, o centro pode estar no centro de gravidade da curva do casco, na média dos pontos de controle ou no centro BB da gaiola de controle. Embora, na prática, estes não pareçam funcionar muito bem.

Observação : embora a curva na figura 1 mostre o centro do BB bem próximo de alguns centros naturais, isso nem sempre é o caso de curvas mais complexas e, principalmente, de polibeziers.

joojaa
fonte
3
Eu não chamaria isso de comentário. Eu chamaria de uma excelente resposta que aborda o nível atual de conhecimento do solicitante, explica completamente por que a pergunta é mais ampla que o esperado e abre caminho para novas perguntas.
Trichoplax
@trichoplax, no entanto, pode ser resumido como "definir centro" pelos menos educados.
catraca aberração
@ratchetfreak Eu prefiro respostas que tentam identificar a lacuna de conhecimento do solicitante em vez de esperar que ele entenda completamente o tópico sobre o qual está perguntando.
Trichoplax
Estou procurando uma maneira de obter o DISTANCE MIDPOINT para minhas curvas quad e bezier cúbica. Eu estava usando o valor de 0,5 e, como você disse, acabei de perceber que é problemático. O que estou tentando fazer agora com o cálculo de bezier é mover bolas a uma velocidade uniforme. Mas usar o valor t torna muito difícil. Acho que preciso encontrar valores t adequados, dependendo do comprimento do arco. Algum recurso ou uma pequena dica para mim, por favor?
Jenix
2
Infelizmente, não existe nenhuma solução de formulário fechado geral simples para beziers, mas um bom recurso que cobre fazer isso numericamente e muito mais pode ser encontrado Aqui, aqui é difícil ler hoje no trabalho que um recurso ainda melhor deve ser vinculado a ele, mas não tenho o link no meu telefone. Mas talvez isso seja o suficiente @Jenix
joojaa
1

Como não nos dizem que definição de "centro" usar, também podemos usar o mais fácil. Isso seria que , , , são os pontos de controle da curva.

Center=14(P0+P1+P2+P3)
P0P1P2P3
bubba
fonte