Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

452
Vistas
¿Cómo encuentro los puntos de control para una curva Bezier?

Necesito implementar conexiones en forma de líneas curvas en C# (Unity). Me gustaría obtener un resultado lo más similar posible a la implementación en Miro.com (ver captura de pantalla).

Después de adjuntar la curva, calculo la ruta de la curva Bezier cúbica. Para este primer segmento, se utilizan los puntos de anclaje y los desplazamientos de los objetos que conecta. No hay problemas en esta etapa.

Problema : al dividir la curva en segmentos haciendo clic y arrastrando uno de los puntos azules del segmento (ver captura de pantalla), se divide en dos por la mitad. En la unión de dos nuevas curvas, se forma un nuevo punto interactivo (móvil) para el cual se desconocen la tangente y las coordenadas de los puntos de control. Necesito encontrar la posición de estos puntos de control cada vez que cambia la posición de los puntos interactivos (puntos blancos en la imagen de abajo). Además, la curva no debe cambiar drásticamente su posición al dividirse, no formar bucles, tener diferentes longitudes de vectores de puntos de control (no estoy seguro aquí) y comportarse lo más adecuadamente posible (como en el tablero en Miro).

Por puntos de control me refiero a 2 puntos de guía invisibles para el segmento Bezier.

De negro pinté los puntos de control conocidos, y de rojo los que necesito encontrar. (Pn - puntos interactivos, Cn - puntos de control) Conexión curva en Miro.com

Los algoritmos que he intentado encontrar dan distancias y direcciones incorrectas de los puntos de control.

Se probaron los siguientes algoritmos:

  1. Interpolación de Tacent - saltos de la curva al separar, dirección inapropiada y cantidad de sangría de los puntos de control;
  2. Algoritmo de Chaikin: la curva salta durante la separación, crea bucles;
  3. La interpolación "personalizada" basada en conjeturas (tiene en cuenta la distancia al centro del segmento entre los puntos inicial y final del segmento, así como la dirección entre los puntos inicial y final): tiene todos los mismos problemas, pero parece ligeramente mejor que los de arriba.

Sospecho que la solución es interpolar cordalmente los puntos usando una spline Catmull-Rom y traducir el resultado a puntos para una curva Bezier. Sin embargo, todavía hay problemas con la implementación.

Las curvas de 3DMax también se ven muy similares. En su documentación, solo encontré una mención de la curva paramétrica.

Curva en 3DMaxMisma curva en Miro

Métodos que no usé (o no funcionaron):

  1. interpolación Catmull-Rom;
  2. interpolación B-spline;
  3. interpolación hermitiana;
  4. Algoritmo de De Casteljau (aunque parece que no para esto)

Estaría inmensamente agradecido por cualquier ayuda, pero pido la mayor cantidad de detalles posible.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Encuentre fuentes útiles para comprender las curvas de Bézier aquí y aquí .

Para hacer lo que quieras, probaría el enfoque Catmull-Rom, que creo que es mucho más simple que el de Bezier, que es el que se usa en el activointermedio , que es gratuito y tienes muchas funciones implementadas.

Si quieres apegarte a las curvas bezier y encontrar los puntos de control, te diré lo que haría para encontrarlos.

Para el caso de la curva de Bezier de 2 puntos de control:

P = (1-t)P1 + tP2

Para conocer los puntos de control P1(x1,y1) y P2(x2,y2), necesitas aplicar la ecuación en un punto conocido de tu curva. Tenga en cuenta que la ecuación 2D es vectorial, por lo que cada punto proporciona 2 ecuaciones, una para x y otra para y, y tiene 4 incógnitas, x e y para cada punto.

Entonces, para el primer nodo de la curva (t=0), tendrías:

Px = (1-0)P1x + 0*P2x

Py = (1-0)P1y + 0*P2y

Para el último punto (t=1)

Px = (1-1)P1x + 1*P2x

Py = (1-1)P1y + 1*P2y

Con estas 4 ecuaciones intentaría conseguir los puntos de control P1 y P2. Puede hacerlo con t = 0 y t = 1, que son los supuestos puntos que conoce de su curva y los que simplifican las matemáticas debido a los valores de t, pero debería poder usar cualquiera siempre que conozca los puntos. coords en la curva para t determinado.

Si la curva es un bezier de 3 puntos de control, necesitaría 6 ecuaciones para los 3 puntos de control y así sucesivamente.

Creo que el mejor enfoque es componer la composición de la curva de curvas cuadráticas y calcular los puntos de control para cada parte, pero no estoy seguro de esto.

Una vez que se entiendan las matemáticas y se logren los puntos de control, en caso de que tenga éxito, intentaría implementar eso en el código.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda