Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
[Solucionado] Curvas De Bézier Con Mas De 4 Puntos De Control
Autor Mensaje
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, 15:42; editado 2 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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

BE-0.0.1.tar.gz
Descripción: Cached igualado a true y el evento _resize del formulario añadido para que se redibuje cada vez que cambie de tamaño el formulario 
Descargar
Nombre del archivo: BE-0.0.1.tar.gz
Tamaño: 5.28 KB
Descargado: 19 veces
BE-0.0.1.tar.gz
Descripción: Cached igualado a true y el evento _resize del formulario añadido para que se redibuje cada vez que cambie de tamaño el formulario 
Descargar
Nombre del archivo: BE-0.0.1.tar.gz
Tamaño: 5.28 KB
Descargado: 19 veces
BE-0.0.1.tar.gz
Descripción: Cached igualado a true y el evento _resize del formulario añadido para que se redibuje cada vez que cambie de tamaño el formulario 
Descargar
Nombre del archivo: BE-0.0.1.tar.gz
Tamaño: 5.28 KB
Descargado: 19 veces

 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Curvas De Bézier Con Mas De 4 Puntos De Control 
 
jsbsan escribió: [Ver mensaje]
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ó: [Ver mensaje]

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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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
 


BEZIER-0.0.1.tar.gz
Descripción: Dibujo de curva Bezier, para n puntos. Ejemplo con 5 puntos. 
Descargar
Nombre del archivo: BEZIER-0.0.1.tar.gz
Tamaño: 5.44 KB
Descargado: 27 veces
BEZIER-0.0.1.tar.gz
Descripción: Dibujo de curva Bezier, para n puntos. Ejemplo con 5 puntos. 
Descargar
Nombre del archivo: BEZIER-0.0.1.tar.gz
Tamaño: 5.44 KB
Descargado: 27 veces
BEZIER-0.0.1.tar.gz
Descripción: Dibujo de curva Bezier, para n puntos. Ejemplo con 5 puntos. 
Descargar
Nombre del archivo: BEZIER-0.0.1.tar.gz
Tamaño: 5.44 KB
Descargado: 27 veces

 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Curvas De Bézier Con Mas De 4 Puntos De Control 
 
Eres un "máquina", Julio...

¡Fantástico!
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Problemas Con El Control Expander [Solucio... destroyer Controles/Librerías/Componentes 1 Miercoles, 25 Noviembre 2009, 10:49 Ver último mensaje
langostino
No hay nuevos mensajes Control ValueBox En Gambas3 [Solucionado] datobinario General 13 Martes, 12 Marzo 2013, 03:53 Ver último mensaje
datobinario
No hay nuevos mensajes Editor De Curvas Bezier jsbsan Videotutoriales 0 Domingo, 27 Julio 2014, 12:10 Ver último mensaje
jsbsan
No hay nuevos mensajes ¿Que Control Utilizo? [Solucionado] gambafeliz General 6 Sabado, 02 Noviembre 2019, 22:04 Ver último mensaje
gambafeliz
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

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


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron