Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

[Solucionado] Curvas De Bézier Con Mas De 4 Puntos De Control

[Solucionado] Curvas De Bézier Con Mas De 4 Puntos De Control
Artículo
Responder citando    Descargar mensaje  
Mensaje [Solucionado] Curvas De Bézier Con Mas De 4 Puntos De Control 
 
Hola,
un nuestro amigo del foro italiano gambas-it.org pide ayuda relacionada con Curvas de Bézier.
A través del metodo CurveTo() en gambas, es posible dibujar una curva de Bezier, pero solo cúbica (4 puntos de control). Leyendo la página de Wikipedia (italiana) sobre el tema: http://it.wikipedia.org/wiki/Curve_...Visual_Basic_6, el encontró un programa en VB que el ha tratado de adaptar a gambas con una función para dibujar las curvas hasta de 255 puntos de control, pero la curva no permanece dentro de los puntos de control y se desborda, como se puede ver mediante el codigo/ejemplo (usando una DrawingArea de 1000x700) que el nuestro amigo dejó en el foro: http://www.gambas-it.org/smf/index.php?topic=3591.0

El pide ayuda para solucionar el problema.



 
última edición por vuott el Domingo, 27 Julio 2014, 16:42; editado 2 veces 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Viernes, 25 Julio 2014, 16:27 ]
 


[Solucionado] Curvas De Bézier Con Mas De 4 Puntos De Control
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Curvas De Bézier Con Mas De 4 Puntos De Control 
 
Vuott:

Le he puesto la propiedad cached de DrawingArea como True, y ya no da error al dibujar.
 be


Pero no se si el resultado es el que el espera...

Saludos



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Viernes, 25 Julio 2014, 17:28 ]
Responder citando    Descargar mensaje  
Mensaje Re: Curvas De Bézier Con Mas De 4 Puntos De Control 
 
jsbsan escribió:  
Vuott:

Le he puesto la propiedad cached de DrawingArea como True, y ya no da error al dibujar.

Uhmmm... muy interesante, jsbsan !
Informaré el nuestro amigo del foro.



jsbsan escribió:  

Pero no se si el resultado es el que el espera...

Saludos

Veremos lo que el dirá.

Gracias por el tu aporte y muchos saludos, jsbsan.



 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Viernes, 25 Julio 2014, 18:04 ]
Responder citando    Descargar mensaje  
Mensaje Re: Curvas De Bézier Con Mas De 4 Puntos De Control 
 
Hola jsbsan,
hay un problema: ampliando el tamaño de DrawingArea del tu ejemplo, yo veo la curva así be

Pero este es precisamente el error lamentado de el nuestro amigo.



 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Sabado, 26 Julio 2014, 02:42 ]
Responder citando    Descargar mensaje  
Mensaje Re: Curvas De Bézier Con Mas De 4 Puntos De Control 
 
Bueno, al final, lo he conseguido    

Lo que he usado es la fórmula paramétrica:

 ecuacion_bezier


Y resultado es este:

 curva_bezier

El código fuente es el siguiente:
' gambas class file

'fuente: http://it.wikipedia.org/wiki/Curve_Bezi%C3%A8r#Applicazione_in_Visual_Basic_6


Public Struct PuntoBezier
  x As Float
  y As Float
End Struct

Private punti As New PuntoBezier[]

Public Sub _new()
  'un esempio con 5 punti di controllo
  
  Dim punto As PuntoBezier
  
  punto = New PuntoBezier
  punto.x = 20
  punto.y = 600
  punti.Add(punto)
  punto = New PuntoBezier
  punto.x = 200
  punto.y = 110
  punti.Add(punto)
  punto = New PuntoBezier
  punto.x = 500
  punto.y = 450
  punti.Add(punto)
  punto = New PuntoBezier
  punto.x = 800
  punto.y = 600
  punti.Add(punto)
  punto = New PuntoBezier
  punto.x = 950
  punto.y = 200
  punti.Add(punto)
  punto = New PuntoBezier
  punto.x = 650
  punto.y = 50
  punti.Add(punto)
  punto = New PuntoBezier
  
End

Public Sub Form_Open()
  
  Me.w = 1000
  Me.h = 700
  Area.Refresh()
  
End

Public Function factorial(n As Integer) As Single
  
  If n = 0 Then
    Return 1
  Else
    Return n * factorial(n - 1)
  Endif
  
End

Public Function NumeroCombinarorio(n As Integer, r As Integer) As Single
  'http://www.hiru.com/matematicas/numeros-combinatorios
  
  Return factorial(n) / (factorial(r) * (factorial(n - r)))
  
End

Public Sub Form_Resize()
  
  Area.Refresh()
  
End

Public Sub Area_Draw()
  
  bezierVB
  
End

Public Sub bezierVB()
  
  Dim t As Single
  Dim n As Integer
  Dim i As Integer
  Dim x As Integer
  
  Dim xtnAntigua As Single
  Dim ytnAntigua As Single
  
  Dim xtn As Single
  Dim ytn As Single
  
  'Poligonal original
  
  For x = 1 To punti.Count - 1
    Paint.MoveTo(punti[x - 1].x, punti[x - 1].y)
    Paint.LineTo(punti[x].x, punti[x].y)
    
  Next
  Paint.stroke
  
  Paint.Brush = Paint.Color(Color.blue)
  '-----------------------------------
  'curva definida por ecuacion...
  '-----------------------------------  
  xtnAntigua = 0
  ytnAntigua = 0
  
  n = punti.Count - 1
  For t = 0 To 1 Step 0.001
    xtn = 0
    ytn = 0
    For i = 0 To n
      xtn = xtn + NumeroCombinarorio(n, i) * punti[i].x * (1 - t) ^ (n - i) * t ^ i
      ytn = ytn + NumeroCombinarorio(n, i) * punti[i].y * (1 - t) ^ (n - i) * t ^ i
    Next
    
    If xtnAntigua = 0 And ytnAntigua = 0 Then
      'primer puntono dibuja nada
    Else
      Paint.MoveTo(xtnAntigua, ytnAntigua)
      Paint.LineTo(xtn, ytn)
      Paint.Stroke    
    Endif
    xtnAntigua = xtn
    ytnAntigua = ytn
    
  Next
  
End
 




 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Sabado, 26 Julio 2014, 21:59 ]
Responder citando    Descargar mensaje  
Mensaje Re: Curvas De Bézier Con Mas De 4 Puntos De Control 
 
He añadido a mi blog, un pequeño editor de curvas Bezier, osea que puedes definir un poligono y mover los puntos, para ver como queda la curva Bezier.


Link



Enlace



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Domingo, 27 Julio 2014, 13:07 ]
Responder citando    Descargar mensaje  
Mensaje Re: Curvas De Bézier Con Mas De 4 Puntos De Control 
 
Eres un "máquina", Julio...

¡Fantástico!



 
jguardon - Ver perfil del usuario Enviar mensaje privado  
jguardon [ Domingo, 27 Julio 2014, 13:37 ]
Responder citando    Descargar mensaje  
Mensaje Re: Curvas De Bézier Con Mas De 4 Puntos De Control 
 
Optime, jsbsan !

El nuestro amigo del foro italiano ha visto la tu applicación y ha escrito simplemente que eres: grande !  



 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Domingo, 27 Julio 2014, 16:41 ]
Responder citando    Descargar mensaje  
Mensaje Re: [Solucionado] Curvas De Bézier Con Mas De 4 Puntos De Control 
 
......la fuerza del interscambio y interrelación entre los foros y los programadores.  



 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Domingo, 27 Julio 2014, 16:49 ]
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
Publicar nuevo tema  Responder al tema  Página 1 de 1
 
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno