Perdon por "postear" algo "irrelevante", pero mi hijo pequeño que está estudiando una ingenieria en electronica me dijo: "Vos podes hacer un programa para diagramar un copo de Nieve de Kock" y por supuesto le dije: "NO sé que es eso pero si me lo explicas, claro que lo puedo hacer" y ese fué MI ERROR.
Que es el Copo de nieve de Kock:
Ya logré determinar los "segmentos"
Pero NO logro posicionarlos en el plano cartesiano para así poder dibujarlos.
SI alguien NO tiene nada que hacer o si se quiere "divertir un rato", agradezco sus comentarios.
Saludos,
Edgar
P.D.:
Me llama mucho la atención este concepto (aunque AUN NO lo entiendo)
Representación como sistema Lindenmayer
La curva de Koch se puede expresar en el sistema Lindenmayer
Alfabeto : F
Constantes : +, −
Axioma : F++F++F
Reglas de producción:
F → F−F++F−F
Que es el Copo de nieve de Kock:
Copo de nieve de Koch - Wikipedia, la enciclopedia libre
es.wikipedia.org
Ya logré determinar los "segmentos"
Calcular los Segmentos existentes:
Sub Calcular_Segmentos
Dim lcSize As Int = 0
Dim lcNivelAnte As Int = 0
'
For i = 1 To etVeces.Text
lcSize = Lista_Copos.Size -1
For x = 0 To lcSize
Dim lcCopo As T_Segmento
lcCopo.Initialize
lcCopo = Lista_Copos.Get(x)
lcNivelAnte = i-1
If lcCopo.Nivel = lcNivelAnte Then
Copo(i, Lista_Copos.Get(x))
End If
Next
Next
'
' Solo se utilizan los segmentos de la ultima Iteraccion
For i = 0 To Lista_Copos.Size-1
Dim lcCopo As T_Segmento
lcCopo.Initialize
lcCopo = Lista_Copos.Get(i)
If lcCopo.Nivel = etVeces.Text Then
Diagrama.Add(lcCopo)
End If
Next
'
End Sub
Sub Copo (ParIterraccion As Int, ParSegmento As T_Segmento)
Dim lcLargo As Long
Dim Copo1 As T_Segmento
Dim Copo2 As T_Segmento
Dim Copo3 As T_Segmento
Dim Copob1 As T_Segmento
Dim Copob2 As T_Segmento
Dim Copob3 As T_Segmento
'
lcLargo = ParSegmento.Largo / 3
'
' Se calcula el primer segmento
Copo1.Initialize
Copo1.Nivel = ParIterraccion
Copo1.Tipo = "Linea"
Copo1.Inicio_X = 0
Copo1.Inicio_Y = 0
Copo1.Largo = lcLargo
Copo1.Final_X = 0
Copo1.Final_Y = 0
Lista_Copos.Add(Copo1)
'
' Se calcula el segundo segmento
Copo2.Initialize
Copo2.Nivel = ParIterraccion
Copo2.Tipo = "Triangulo"
Copo2.Inicio_X = 0
Copo2.Inicio_Y = 0
Copo2.Largo = lcLargo
Copo2.Final_X = 0
Copo2.Final_Y = 0
Lista_Copos.Add(Copo2)
'
' Se calcula el tercer segmento
Copo3.Initialize
Copo3.Nivel = ParIterraccion
Copo3.Tipo = "Linea"
Copo3.Inicio_X = 0
Copo3.Inicio_Y = 0
Copo3.Largo = lcLargo
Copo3.Final_X = 0
Copo3.Final_Y = 0
Lista_Copos.Add(Copo3)
'
If ParSegmento.Tipo = "Triangulo" Then
'
' Se procesa el otro segmento del triangulo (lado "B")
'
' Se calcula el primer segmento
Copob1.Initialize
Copob1.Nivel = ParIterraccion
Copob1.Tipo = "Linea"
Copob1.Inicio_X = 0
Copob1.Inicio_Y = 0
Copob1.Largo = lcLargo
Copob1.Final_X = 0
Copob1.Final_Y = 0
Lista_Copos.Add(Copob1)
'
' Se calcula el segundo segmento
Copob2.Initialize
Copob2.Nivel = ParIterraccion
Copob2.Tipo = "Triangulo"
Copob2.Inicio_X = 0
Copob2.Inicio_Y = 0
Copob2.Largo = lcLargo
Copob2.Final_X = 0
Copob2.Final_Y = 0
Lista_Copos.Add(Copob2)
'
' Se calcula el tercer segmento
Copob3.Initialize
Copob3.Nivel = ParIterraccion
Copob3.Tipo = "Linea"
Copob3.Inicio_X = 0
Copob3.Inicio_Y = 0
Copob3.Largo = lcLargo
Copob3.Final_X = 0
Copob3.Final_Y = 0
Lista_Copos.Add(Copob3)
End If
End Sub
Pero NO logro posicionarlos en el plano cartesiano para así poder dibujarlos.
SI alguien NO tiene nada que hacer o si se quiere "divertir un rato", agradezco sus comentarios.
Saludos,
Edgar
P.D.:
Me llama mucho la atención este concepto (aunque AUN NO lo entiendo)
Representación como sistema Lindenmayer
La curva de Koch se puede expresar en el sistema Lindenmayer
Alfabeto : F
Constantes : +, −
Axioma : F++F++F
Reglas de producción:
F → F−F++F−F